将事件处理程序动态添加到选择框中
Dynamically adding event handler to select box
我正在尝试将事件侦听器动态添加到选择框中。
有了这个代码,我没有得到任何响应,所以没有警报框:
var table = $('<table></table>');
var row = $('<tr><td></td></tr>').html('<select id="sel1"><option>test</option><option>test2</option></select>');
$("sel1").on('change', function() {
alert(this.val());
});
table.append(row);
$('#mydiv').append(table);
此外,如何在td
之间添加选择框?
目前,它添加在tr
之间,td
根本不存在。
这是一把小提琴
更新的Fiddle
当您处理动态添加的新DOM时,应该使用事件委派on():
$("#mydiv").on('change', '#sel1', function() {
alert($(this).val());
});
注意:
- 您应该在
sel1
之前添加id
选择器,它应该是#sel1
.val()
是一个jquery方法,您不能在像this.val()
这样的javascript对象上调用它,它应该是$(this).val()
当前代码不会在
td
中添加select,而是直接在tr
标签中添加,这样您就可以替换:var row = $('<tr><td></td></tr>').html('<select id="sel1"><option>test</option> <option>test2</option></select>');
签字人:
var row = $('<tr></tr>').html('<td><select id="sel1"><option>test</option><option> test2</option></select></td>');
希望这能有所帮助。
工作代码段
var table = $('<table></table>');
var row = $('<tr></tr>').html('<td><select id="sel1"><option>test</option><option>test2</option></select></td>');
$("#mydiv").on('change', '#sel1', function() {
alert($(this).val());
});
table.append(row);
$('#mydiv').append(table);
td{
border: 1px solid;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="mydiv"></div>
在代码中需要注意的几点
1)
错误的选择器$("sel1")
代码中的问题是$("sel1")
,您需要使用#
通过id进行选择,因此它应该是$("#sel1")
。所以你的代码会像
$("#sel1").on('change', function() {
alert(this.val());
});
2)将HTML附加到DOM后绑定事件或使用事件委派您的代码应该按以下顺序放置工作Fiddle
var table = $('<table></table>');
var row = $('<tr><td></td></tr>').html('<select id="sel1"><option>test</option><option>test2</option></select>');
table.append(row);
$('#mydiv').append(table);// now the element is added to DOM so bind event
$("#sel1").on('change', function() {
alert($(this).val()); // note here I changes this.val() to $(this).val()
});
或者另一个选项是使用事件委派工作Fiddle
要将事件添加到动态元素,请使用事件委派
$('body').on('change',"#sel1", function() {
alert($(this).val());
});
3)要在td中放置选择标记,请使用以下语法
var row = $('<tr></tr>').html('<td><select id="sel1"><option>test</option><option>test2</option></select></td>');
将td
与select
标签一起包裹,不要包裹在tr
工作Fiddle
您需要在附加到页面后绑定更改事件:
var table = $('<table></table>');
var row = $('<tr><td></td></tr>').html('<select id="sel1"><option>test</option><option>test2</option></select>');
table.append(row);
$('#mydiv').append(table);
$("#sel1").on('change', function() {
alert(this.val());
});
而且您还忘记了"sel1"的#id选择器
您的代码中有三个主要问题
1.id选择器必须从#
开始
$("#sel1").on('change', function() {
2.您应该只在附加元素之后绑定更改侦听器,因为它在之前不存在于DOM中
3.使用
$('<tr><td></td></tr>')
您将获得对该行的jquery引用(<tr>
元素)。然后用.html()
替换行的内容(当然包括<td>
)
相关文章:
- 将用户选择添加到数组中
- JQuery未选择添加的元素
- 根据用户的下拉选择添加表单字段
- 向选择添加标签
- 尝试在鼠标悬停时为Wordpress中的下拉菜单选择添加突出显示
- 选择 2 添加其他参数以选择选项
- Jquery 可以选择添加回调
- 如何在不按 DOM 顺序排序的情况下将 jquery 选择添加到一起
- 使用 jQuery.find 选择添加的图像进行 css 操作不起作用
- 角度选择添加未定义的选项
- 引导-选择添加项目并选择它
- 根据表单选择添加表单字段
- 在单选按钮选择上显示表,然后将单选按钮值传递给表中的字段,选择添加更多,然后附加到现有表
- 不能选择添加的元素
- 我需要创建一个多选项选择页面,其中每个选择添加或减去产品的价格
- 可以't选择添加的jQuery
- Jquery复选框上的选择添加一个名称属性和增量在多个选择
- 选择添加任何自定义值的框
- 如何从用户接收到的输入中为html选择添加一个选项
- 当选择添加时,使购物车数量计数器显示添加的产品