Intraweb模态框中获取点击<td>ID并通过Ajax传递的方法咨询
问题解决:模态框内表格TD点击无法获取ID的修正
你的问题出在事件绑定的目标和事件委托写法错误:
- 原代码把点击事件绑定在了
#View这个模态框容器div上,点击时$(this)指向整个div,用closest("td")根本找不到对应的单元格(div和td不存在祖先关系)。 - 主页面的写法能生效,是因为直接绑定在了已存在的
table td上,但如果主页面表格是动态创建的,这种写法同样会失效,只是你的主页面刚好是静态元素。
正确写法
把模态框的事件绑定改成事件委托,监听模态框内的td点击,同时简化获取ID的逻辑:
// 模态框内表格的点击事件(支持动态创建的td) $('#View').on('click', 'td', function () { var tdId = $(this).attr('ID'); ajaxCall("IH", "Params=VW" + tdId); }); // 主页面表格的点击事件(如果是动态创建的,建议也改成事件委托写法) $(document).on('click', 'table td', function () { var c = $(this); var tdId = c.attr('ID'); if (Number(tdId) > 0) { c.addClass("Select"); } ajaxCall("IH", "Params=" + tdId); });
关键修正点
- 事件委托目标调整:
$('#View').on('click', 'td', function(){...})表示在#View容器内,监听所有td的点击事件,不管td是静态还是运行时动态生成的都能触发。 - 直接获取当前元素:点击td时
$(this)就是被点击的单元格,不需要用closest("td")(closest是向上查找最近的匹配祖先元素,这里本身就是td,完全多余)。 - 主页面的优化:如果主页面的表格也是运行时动态创建的,建议改成
$(document).on('click', 'table td', ...)这种事件委托写法,避免静态绑定失效的问题。
内容的提问来源于stack exchange,提问作者jvm
相关产品推荐
相关产品推荐

