Javascript jquery忽略第一次单击
我有这个功能:Javascript jquery忽略第一次单击,javascript,jquery,Javascript,Jquery,我有这个功能: NewShowHideDiv2(iconID, divID, disabled) { var x = document.getElementById(divID); var y = document.getElementById(iconID); $(eval(y)).click(function() { console.log(eval(y)); $(eval(y)).toggleClass( "clicked" );
NewShowHideDiv2(iconID, divID, disabled) {
var x = document.getElementById(divID);
var y = document.getElementById(iconID);
$(eval(y)).click(function() {
console.log(eval(y));
$(eval(y)).toggleClass( "clicked" );
});
$(eval(x)).slideToggle("slow", function() {
});
}
我所要做的就是在单击时切换“clicked”类。但是,它会忽略第一次和第二次单击,然后将其应用于第三次和所有后续奇数次单击。有什么想法吗?不知道如何称呼
NewShowHideDiv2
,很难确定,但可能存在一些问题
首先,通过将click binding函数放在另一个函数中,在运行NewShowHideDiv2
之前,事件不会绑定到元素。所以你会想把它拔出来,放进这样的东西里:
$( document ).ready(function() {
$(eval(y)).click(function() {
console.log(eval(y));
$(eval(y)).toggleClass( "clicked" );
});
});
此外,JS对象上的eval方法可能会导致问题,当然不是最佳实践。您需要将其修改为:
$( document ).ready(function() {
$("#iconIDHere").click(function() {
console.log(this);
$(this).toggleClass( "clicked" );
});
function NewShowHideDiv2(divID, disabled) {
$("#" + divID).slideToggle("slow", function() {
});
}
});
用vanilla JS试试这个:
var x = document.getElementById('divID');
x.addEventListener('click', function(e) {
if(e.target.classList.contains('clicked')) {
e.target.classList.remove('clicked');
} else {
e.target.classList.add('clicked');
}
});
我认为JQuery是:
$('#divID').click(function() {
$('#divID').toggleClass('clicked');
});
为什么要对元素调用
eval()
?除了上面提到的问题之外,似乎是绑定单击事件一次又一次地导致了错误。您应该阅读eval
:您希望它做什么?我正在处理的是遗留代码,因此是(eval)。我完全赞成摆脱它。