点击事件不工作的动态插入元素在chrome(jQuery)
click event not working on dynamically inserted element in chrome(jQuery)
我在这里做的是动态创建一个下拉列表,并将click
事件绑定到<select>
<option>
var $select = $('<select></select>'),
$option1 = $('<option>a</option>'),
$option2 = $('<option>b</option>');
$option1.val(1);
$option2.val(2);
$(document.body).on('click','select option',function(){
console.log("click-option works");
});
$select.append($option1);
$select.append($option2);
$(document.body).append($select);
正如我在这里读到的,因为我是动态添加内容的,所以我把事件处理委托给了DOM中最上面的元素。
现在我的问题是这是不工作在chrome如预期的。在《火狐》中,这似乎行得通。
我也读过这个链接和另一个,但无济于事。
有趣的是,当我在'select option'
选择器
$(document.body).on('click','select',function(){
console.log("click-option works");
});
输出被记录,但这绝对不是我想要的。只要我选择下拉菜单本身,就会记录输出,更不用说下拉菜单中的选项了。作为临时工作,我以以下方式使用change
事件:
$(document.body).on('change','select',function(event){
console.log("change works");
console.log(event);
});
这似乎做的伎俩,但我想知道为什么它不是在原来的情况下工作,如果可能的话,任何变通办法。
这是我到目前为止所做的工作。
更新:我也检查了这个链接。然而,这只是纯javascript,我想知道为什么它不能在我的情况下工作。更具体地说,在委托的事件处理程序中,我们指定选择器,为什么它在'select option'
失败,并在'select'
chrome工作?
问题是因为您将click
事件附加到option
元素,这不是很可靠。click
事件应该在select
上运行——但请注意,即使这样也不符合最佳实践,因为您应该使用change
事件,这样即使通过键盘选择了该选项,也会触发代码。要在处理程序中使用$(this).val()
获取所选选项的值,如下所示:
var $select = $('<select></select>'),
$option1 = $('<option>a</option>'),
$option2 = $('<option>b</option>');
$option1.val(1);
$option2.val(2);
$(document).on('change', 'select', function() {
console.log($(this).val());
});
$select.append($option1);
$select.append($option2);
$('body').append($select);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
还可以缩短为:
$(document).on('change', 'select', function() {
console.log($(this).val());
});
$('<select><option value="1">a</option><option value="2">b</option></select>').appendTo('body');
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
相关文章:
- Firefox赢得了'不会显示我添加的jquery元素,但Chrome会显示
- Chrome应用程序在全屏中创建新窗口-html元素不是全高的
- 制作一个chrome扩展,替换css和js元素
- 元素意外地隐藏在Safari的某些实例中,总是出现在Firefox、Chrome中
- jQuery在使用css定位的元素上调整大小;无法在chrome中正确调整大小
- Javascript'元素'在ie中未定义,但在chrome和firefox中运行良好
- 当我单击chrome的输入类型=搜索元素上的X时,是否触发了任何事件
- Chrome扩展:等待元素加载(async js)
- Javascript链接-试图设置元素值-奇怪的行为chrome&安卓
- javascript:阻止表示添加的数组's属性作为元素(在Chrome中)
- 谷歌Chrome元素仍然存在:即使从光标移开,也要悬停
- Chrome扩展-按类名将元素附加到另一个元素
- Chrome扩展-在正文之前附加链接元素
- Fetch元素鼠标当前指向的Chrome开发工具已启用
- CKEditor:以小部件作为第一个元素,选择所有在Chrome中不工作的
- 重点关注jquery tokeninput元素(Chrome和Opera)
- 我正在尝试从网站上完全删除一个元素.Chrome扩展
- 鼠标悬停事件显示:none(隐藏)元素(chrome&opera)
- 如何获得"检查元素"(Chrome)代码使用java
- 加载html到页面元素(chrome扩展)