2013-11-04 56 views
0

我需要禁用和启用我的代码中的div - 我发现off()和on()函数禁用事件,他们工作正常,但问题是,我不能使用我之前定义的处理程序。例如:在jquery中禁用和启用事件

这是其上负载

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> 
+1

请问你的HTML看起来像代码?选择*它非常昂贵,你有没有尝试在容器中添加一个类并将其用作条件? –

+0

感谢您的关注,我将html代码添加到正在调用启用和禁用事件的 –

+0

问题?也是一个jsfiddle将有助于理解问题:) – sissy

回答

0

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

$(document)准备就绪时,您想禁用所有div。然后,在某个时间点,当ajax调用返回时,您想启用您的div并执行其他操作。

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

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

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

收拾函数内部的$(文件)。就绪()。

然后,在EnableElmt中放置$(document).ready(),并通过ajax响应调用它。

在enableElmt结束,那么你可以调用管理上的div的点击(否则仍然被禁用)

希望这有助于

+0

谢谢,这是行不通的 - 我隐藏的元素,当我需要我显示他们,这项工作暂时 –

0

我的方法总是绑定处理程序。我会改变处理程序代码,所以如果一个动作需要做它可以决定,例如:

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

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

希望这会有所帮助!

+0

感谢您的关注,它不工作,看起来喜欢问题是在处理程序不在禁用和启用 - 我不知道:( –