我在 jQuery 尝试设置 div 的“click”方法时得到了意想不到的结果。请参见这个jsfiddle http://jsfiddle.net/fkMf9/。请务必打开控制台窗口。单击该单词几次并观察控制台输出。 click 函数在只应调用一次的情况下被多次调用。
最后注释掉的代码工作得很好。难道我做错了什么?我是 jQuery 新手。
这是代码:
function toggleDiv(status)
{
console.log("toggleDiv(" + status + ")");
if (status) {
$("#test").html("Goodbye");
}
else {
$("#test").html("Hello");
}
$("#test").click(function() {
toggleDiv(!status);
});
// Non-jquery method works fine....
//document.getElementById("test").onclick = function () {
// toggleDiv(!status);
//}
}
更新:看起来有很多方法可以给这只猫剥皮。这里真正的问题是我不明白 jQuery“单击”函数添加了另一个处理程序。我认为它取代了当前的处理程序。
您正在设置一个新的.click()
每次您继续单击 eventHandler (这反过来会创建更多事件)。顺便说一句,尽量不要使用onclick / onmouseover / onmouseout / etc
DOM 元素上的事件。在 Internet Explorer 中,这些创建脚本块(如果您使用 Visual Studio,您可以明显地看到这些脚本块)。具有数千个这样的页面会极大地降低性能!
看来您正在努力实现这一目标:
jsFiddle 演示 http://jsfiddle.net/74AYy/5/
$("#test").on('click', function() {
var this$ = $(this),
_status = !!this$.data('status'); // force to boolean
// ^will default to false since we have no data-status attribute yet
this$.html(_status ? 'Hello' : 'Goodbye')
.data('status', !_status);
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)