Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jquery忽略第一次单击_Javascript_Jquery - Fatal编程技术网

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)。我完全赞成摆脱它。