【发布时间】:2015-06-06 11:46:13
【问题描述】:
我有一些表格代表测验创建页面,我想在其中动态添加问题和这些问题的答案。我想响应新创建按钮的点击事件。
问题是 onClick 事件仅在从一开始就存在的第一个按钮上执行。
这是我的代码示例。我有 id 为 myForm 的表单,id 为 questioni 的 div 封装了有关i-th 问题的所有内容(还有带有new_answer 类的按钮,用于添加该特定问题的答案),变量curr_q (当前问题我正在创作)。
$(function () {
$("#myForm").on('click', "#question" + curr_q + " .new_answer", function () {
alert("#question" + curr_q + " .new_answer");
});
});
这也是小提琴 - http://jsfiddle.net/sruzic/8yt9jcqh/(有点压倒性,但问题是当你点击现有的 Create Question 时,新创建的 Create Answer 按钮没有响应,而“旧”Create Answer 提醒选择器是question1 .new_answer 正是新创建的Create Answer 按钮?!
提前致谢。
【问题讨论】:
-
如果你有一个函数调用,
foo(bar),那么所有的参数在传递给函数之前在被评估。意思是,"#question" + curr_question + " .new_answer"被评估,产生一个字符串,例如"#question0 .new_answer",这就是传递给.on的值。稍后更改curr_question不会影响该值。它不会被“神奇地”重新评估。为什么不直接使用.new_answer作为选择器呢? -
我也认为是这样。我的问题有什么可能的解决方案吗?
-
$("#myForm").on('click', ".new_answer", function () { ... }). -
所以这里的问题是,当您应该使用类时,您正在使用 ID,除非预先指定每个可能的 id 组合,否则这将永远无法工作。我们还需要了解此处使用的 HTML 结构,因为您可能需要能够根据问题在 DOM 中相对于彼此的位置来关联问题的答案。请在问题中添加示例 HTML。
-
在这种情况下,您可能应该将处理程序直接绑定到元素上。添加新元素时,将处理程序与前一个元素解除绑定。
标签: javascript jquery html dynamic onclick