jquerymobile之collapsible可折叠块标题内容动态显示
jquery mobile提供了一种可折叠的组件--data-role="collapsible",这种组件可以通过点击折叠块头部来展开/折叠块内的内容,详细组件说明可参考w3cshool可折叠块。
在做一个小项目的时候,我有一个模块用到了可折叠块这个组件:初始页面时collapsible的标题是空的,只有用户在collapsible下面的文本框输入内容后,标题会跟文本框内容同步。
如下图所示,初始界面时,collapsible标题为空,只有在“险种”文本框中输入内容,collapsible标题才会产生变化。
对应的HTML代码如下:
- <div data-role="collapsible" id="collapsible">
- <h3 class="h3"> </h3>
- <div class="ui-field-contain" data-controltype="textinput">
- <label for="insurance_name">
- 险种
- </label>
- <input name="insurance_name" value="" type="text">
- </div>
- <div class="ui-field-contain" data-controltype="textinput">
- <label for="insurance_company">
- 投保公司
- </label>
- <input name="insurance_company" value="" type="text">
- </div>
- <div class="ui-field-contain" data-controltype="dateinput">
- <label for="insurance_date">
- 投保日期
- </label>
- <input name="insurance_date" value="" type="date">
- </div>
- <div class="ui-field-contain" data-controltype="textinput">
- <label for="insurance_year">
- 年期
- </label>
- <input name="year_period" value="" type="text">
- </div>
- <div class="ui-field-contain" data-controltype="textinput">
- <label for="insurance_cost">
- 年保费
- </label>
- <input name="year_cost" value="" type="text">
- </div>
- <div class="ui-field-contain" data-controltype="textarea">
- <label for="insurance_comment">
- 备注
- </label>
- <textarea name="insurance_comment" placeholder=""></textarea>
- </div>
- </div>
- </div>
要想监听“险种”文本框值变化,就需要用到input和propertychange这两个事件,这两个事件是监听内容变化的。
- dom.bind('input propertychange', function() {
- //do something
- });
只要绑定好这两个内容变化事件,然后在事件体里面编写collapsible标题赋值代码即可搞定问题。
collapsible标题对应前面HTML代码中的"<h3></h3>"元素,但是通过$("h3").html(dom.val())这种形式给它赋值是错误的,这样会导致collapsible样式乱套。因为jquerymobile在上面html基础上动态创建了别的节点元素和样式,最终才会有这样折叠的效果。
可以通过浏览器查看最终的页面元素,你就会发现它与原本的HTML有很大的变化。
上图<span class="ui-btn-text"></span>才是现实标题内容的节点。
所以要想给collapsible标题赋值,就需要找到class为ui-btn-text的节点。
- dom.parents("#collapsible").find(".h3").find(".ui-btn-text").html(dom.val());
完整的javascript代码应该这样来写:
- $(document).on("pageinit", "#insurer_list_page", function() {
- var dom = $("#collapsible-set").find("input[name='insurance_name']");
- dom.bind('input propertychange', function() {
- var value = dom.val();
- if($.isNull(value)){
- //输入内容为空,则以空格填充
- value = " ";
- }
- dom.parents("#collapsible").find(".h3").find(".ui-btn-text").html(value);
- });
- });
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
2016-08-17 Android M(6.0) 权限爬坑之旅
2016-08-17 Android M 新的运行时权限开发者需要知道的一切
2015-08-17 adb logcat 命令行用法
2013-08-17 HttpClient的用法总结
2013-08-17 URLConnection和HttpClient使用入门