对象#<HTMLLIElement>没有方法'绑定'
Object #<HTMLLIElement> has no method 'bind'
我正在尝试动态迭代列表,并将每个"li"元素与dblclick事件绑定。
我想要的是能够做以下事情:
var sorttList = document.getElementById("list1");
for (var k = 0; k < sorttList.childNodes.length; ++k) {
sorttList.childNodes[k].bind('dblclick', function() {
//some event
});
}
当我尝试这样做时,我得到错误"Uncaught TypeError:Object#HTMLLIElement没有方法‘bind’"
此任务的合适语法是什么?
bind()
不是普通JavaScript的一部分。您的意图可能是使用作为jQuery库一部分的bind()
函数。
如果您没有使用jQuery,则需要获取它,然后更新代码以使用jQuery选择器并传递jQuery对象。
如果您已经在页面中包含jQuery,那么您需要确保对jQuery对象调用bind()
。更改:
sorttList.childNodes[k].bind('dblclick', function() {
至
$(sorttList.childNodes[k]).bind('dblclick', function() {
这不是一个完美的解决方案,但希望这将展示$()
在使用jQuery时如何返回jQuery对象,而不是标准的HTML元素JavaScript对象。bind()
方法存在于jQuery对象上,但不是像您正在使用的那样的标准DOM对象。
var sorttList = document.getElementById("list1");
这是DOM对象,而不是jQuery,并且您正在获取针对html节点集的子节点,而不是一个jQuery对象。
jQuery("#list1 li").on("dblclick", function(){});
如果使用jQuery:
$("#list1").children().on('dblclick', function() {
//some event
//var k = $(this).index(); will get the elements index
});
或者如果你只需要迭代:
$.each($("#list1").children(), function(k, elm) {
$(elm).on('dblclick', function() {
//some event, k still refers to the index
});
});
或者只是简单:
var sorttList = document.getElementById("list1");
for (var k = 0; k < sorttList.childNodes.length; ++k) {
sorttList.childNodes[k].ondblclick = function() {
//some event
};
}
您的另一个选择就是直接将函数分配给DOM事件处理程序:
sortList.childNodes[k].ondblclick = function(){ ... };
为了避免覆盖现有侦听器:
var curr = sortlist.childNodes[k].ondblclick;
var olddblclick = curr.ondblclick;
curr.ondblclick = function(e){
if(olddblclick) olddblclick.call(curr,e);
// code for new evt listener here
};
正确的方法可能是在父级上添加事件。你在所有的孩子身上添加了相同的事件,这有什么好处?使用jQuery:
$( '#list1' ).on( 'dblclick', function() {
});
// If you want to reduce to "li" elements only:
$( '#list1' ).on( 'dblclick', 'li', function() {
});
如果您只是使用纯javascript,我想您并不关心浏览器兼容性。以下是如何做到这一点:
document.getElementById( 'list1' ).addEventListener( 'dblclick',
function( e ) {
if ( e.target.tagName === 'LI' ) {
// you clicked a LI element
}
});
仅供参考,bind
是jQuery的一个(旧)函数,用于绑定事件。它在jQuery对象上可用。不是DOM元素(getElementById
返回的内容)。它也是Function.prototype
中ES5(javascript标准)之后可用的另一个功能。您可以在函数上调用它,而不是在DOM元素上调用,正如您的错误所示:-)。
- 将对象的方法绑定到元素的事件
- 将类方法绑定到类外绑定的事件处理程序内的AJAX成功回调
- bind():您正在将一个组件方法绑定到该组件.React会自动为您执行此操作
- JS方法绑定与2个不同的这个
- backbonejs:不能调用未定义的方法“绑定”
- 将所有方法绑定到“this”
- 内联方法绑定是一种不好的做法
- 如何使用 jQuery 和静态页方法绑定控件数据
- 在Javascript中,有没有一种简洁的方法可以将方法绑定到对象
- 如何将多个方法绑定到单个事件
- 监视一个方法与西农.方法绑定到事件侦听器.方法已执行,但.calledOnce为false
- Javascript OOP:将方法绑定到事件处理程序
- “this"当方法绑定到事件侦听器时未定义
- 如何将参数传递给绑定方法?绑定与匿名方法
- 将c++的虚方法绑定到具有覆盖能力的js中
- 是否有可能绑定到Click事件而不使用匿名函数——我只想调用命名函数
- Backbone.js集合方法绑定
- 为什么我必须为React组件类中定义的方法绑定(this),而不是在常规ES6类中
- 了解AngularJS指令方法绑定是否默认为angular.noop
- 主干任务示例方法绑定