2013-11-04 54 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

感謝您的關注,它不工作,看起來喜歡問題是在處理程序不在禁用和啓用 - 我不知道:( –