0

我需要在我的代码中禁用和启用一个 div - 我找到了用于禁用事件的 off() 和 on() 函数,它们工作正常,但问题是我无法使用我之前定义的处理程序。例如 :

这是在加载时禁用侦听器的代码

function disableEvent ()
{
    $("body").ready(function(e) 
    {
        $("#part *").attr("disabled","true").off("click");
        $("#sgmnt *").attr("disabled","true").off("click");
        $("#subSgmnt *").attr("disabled","true").off("click");
    });
}

这是代码启用监听器

function enableElmnt ( id )
{   
    p="#"+id+" *";
    alert(id);

    $("body").ready(function(e) {
    $(p).attr("disabled","false").on("click",false);
    });
}

这是处理程序代码

$(document).ready(function() {
    $(".partElements").not("#part19").not("#part20").not("#part21").click( function(){
    $(".partElements").not("#part19").not("#part20").not("#part21").css("background-color","#FFF");
    $(".partElements").not("#part19").not("#part20").not("#part21").css("color","#000");
    $(this).css("background-color","#000");
    $(this).css("color","#FFF");
    selectDiv=$(this).attr("id");
        loadLists("2",selectDiv);
     });
});

和html代码

 <div id="part">
       <div class="partElements" id="part1"></div>
       <div class="partElements" id="part2"></div>
       <div class="partElements" id="part3"></div>
       <div class="partElements" id="part4"></div>
       <div class="partElements" id="part5"></div>
       <div class="partElements" id="part6"></div>

       <div class="partElements" id="part7"></div>
       <div class="partElements" id="part8"></div>
       <div class="partElements" id="part9"></div>
       <div class="partElements" id="part10"></div>
       <div class="partElements" id="part11"></div>
       <div class="partElements" id="part12"></div>

       <div class="partElements" id="part13"></div>
       <div class="partElements" id="part14"></div>
       <div class="partElements" id="part15"></div>
       <div class="partElements" id="part16"></div>
       <div class="partElements" id="part17"></div>
       <div class="partElements" id="part18"></div>

       <div class="partElements" id="part19">edit</div>
       <div class="partElements" id="part20">ddelete</div>
       <div class="partElements" id="part21">modify</div>
     </div>
4

2 回答 2

0

我的方法总是绑定处理程序。我会更改处理程序代码,以便它可以决定是否需要执行某个操作,例如:

$("SELECTOR").on("click", function() {
    if (!$(this).prop("disabled")) {
        // Do something
    }
});

处理程序总是被调用,但只有一个动作,如果点击的元素没有被禁用。

希望这可以帮助!

于 2013-11-04T09:11:12.330 回答
0

我在您的代码中看到的问题是调用不同函数的顺序。首先,我认为您的 enableElmt 函数中不需要 $(document).ready ,然后重新考虑其他代码。

当 $(document) 准备好时,你想禁用所有的 div。然后,在某个时刻,当一个 ajax 调用返回时,您想要启用您的 div 并执行其他操作。

所以第二个错误应该是 $(document).ready (代码的第三部分),管理对 div 的点击(而这些 div 仍然被禁用)。

所以,为了我会做这样的事情:

$(document).ready(disableElmt());

把 $(document).ready() 放在函数内部。

然后,将 $(document).ready() 放在 EnableElmt 中,并使其由 ajax 响应调用。

在 enableElmt 结束时,您可以调用管理 div 上的点击的代码(否则仍然禁用)

希望这可以帮助

于 2013-11-04T10:01:51.527 回答