jquery忽略第一次单击

时间:2018-04-23 21:07:30

标签: 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" );

     });
   $(eval(x)).slideToggle("slow", function() {

    });
}

我想让它做的就是在点击时切换“点击”类。但是,它会忽略第一次和第二次单击,然后将其应用于第三次和所有后续奇数次点击。任何想法?

2 个答案:

答案 0 :(得分:0)

在不知道如何调用NewShowHideDiv2的情况下,很难确定,但可能存在一些问题。

首先,通过将您的点击绑定功能放在另一个函数中,在运行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() {

        });
    }
}); 

答案 1 :(得分:0)

尝试使用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');
});