JS动态事件绑定问题
今天搞一个连环套的动态选项展示,需要给下拉框动态绑定事件,谁知绑定中出现问题,总是执行第一次绑定的时间而后续绑定的事件没有被触发。
1 //重写增加行方法
2 function initMainItem(gridId){
3 jqgrid = $('#' + gridId);
4 var colModel = jqgrid.jqGrid().getGridParam("colModel");
5 var rowid ="rowid" + new Date().getTime();
6 jqgrid.jqGrid("addRowData", rowid, JSON.stringify(colModel), "last");
7 jqgrid.editRow(rowid, true);
8 var optTd = $("#" + rowid + " td[aria-describedby='basMgmtGridIdGrid_opt']");
9 var buttonStr= '<a href="#" class="btn btn-xs btn-danger" onclick="delRowData(\'' +
10 rowid+'\')"><i class="fa fa-trash"></i> 删除</a> ';
11 optTd.html(buttonStr);
12 jqgrid.jqGrid('setSelection',rowid);
13 var option = "";
14 for(var key in itemData) {
15 option += "<option role='option' value='" + key + "'>" + mainItemDict[key] + "</option>";
16 }
17 var mainItem = $("#" + rowid + " select[name=mainItem]");
18 mainItem.html(option);
19 mainItem.change(function () {initSubItem(mainItem);});
20 initSubItem(mainItem);
21 }
22
23 function initSubItem(mainItem) {
24 var mainItemKey = mainItem.val();
25 var priceItems = itemData[mainItemKey];
26 var option = "";
27 for(var key in priceItems) {
28 option += "<option role='option' value='" + key + "'>" + key + "</option>";
29 }
30 var subItem = mainItem.parent("td").next("td").children();
31 subItem.html(option);
32 subItem.change(function () {initItem(subItem, priceItems);});
33 initItem(subItem, priceItems);
34 }
35
36 function initItem(subItem, priceItems) {
37 var subItemKey = subItem.val();
38 var priceItem = priceItems[subItemKey];
39 var unitItem = subItem.parent("td").next("td");
40 unitItem.html("<span class='form-control' style='background-color:transparent;border-color:transparent'>" + unitDict[priceItem.unit] + "<span>");
41 }
注意两个动态绑定,其实很简答的知识,绑定新事件前要清除旧事件,因为js默认不覆盖,这些都是学过的,就是不出错get不到啊。
改为:
1 subItem.unbind("change").change(function () {initItem(subItem, priceItems);});
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~