2012-06-06 24 views
0

我正在製作日曆。我希望用戶能夠點擊特定日子(表格單元格)內的任何地方,併發生一些事情。當天可能會有事件,這些事件包含在表格單元格內的div內。如果用戶點擊div,則發生其他事情。當用戶點擊doSomethingElse()時,我已經設法阻止事件冒泡,但在第一次點擊時它不起作用。它只適用於隨後的點擊,而不是第一次點擊。爲什麼在第一次點擊時取消事件冒泡工作並且僅對所有後續點擊有效?第一次點擊div時,如何讓事件冒泡起作用?

HTML:

<table> 
    <tr> 
     <td onclick="doSomething()"> 
      <div class="view" onclick="doSomethingElse()">Text</div> 
     </td> 
    </tr> 
</table> 

的Javascript:

function doSomethingElse() { 
    $('.view').click(function(e){ 
     e.cancelBubble = true; 
     e.returnValue = false; 

     if (e.stopPropagation) 
     { 
      e.stopPropagation(); 
     } 
    }); 

    $('#myID').load('myFile.php'); 
} 

更新: 我把這個我的網頁上:

<script> 
$(document).ready(function() { 
    $('.view').click(function(e){ 
     e.cancelBubble = true; 
     e.returnValue = false; 

     if (e.stopPropagation) 
     { 
      e.stopPropagation(); 
     } 
    }); 
}); 
</script> 

然後的onclick = 「doSomethingElse()」 剛包含我的腳本的其餘部分。問題是,doSomethingElse()的參數,所以好像我需要還具備以下條件:

<div class="view" onclick="doSomethingElse(id1,id2)">Text</div> 

它仍然只適用於第2,第3,...點擊,但不是第一個。

回答

1

因爲您已經在onclick處理程序中有效地編寫了綁定代碼。將您的點擊綁定($('。view')。click part)放入文檔中。另外,爲什麼處理程序外的負載?

+0

這應該是正確的。用戶第一次點擊div時,doSomethingElse被調用,它只是綁定一個新的點擊處理程序(無法調用它,因爲它在那裏和那裏綁定)。從那以後,任何點擊都應該同時調用doSomethingElse(綁定另一個點擊處理程序)和該功能的已綁定點擊處理程序......這是多餘且不必要的(但並非完全有害) – Ian

+0

感謝您的評論。我不知道你的意思是'將你的點擊綁定($('。view')。click part)放入文檔中。「 –

+0

ok,那$(「。view」)。click是一個綁定(即綁定具有該類到click事件的元素,而不是實際執行處理程序內的代碼)。因此,您需要在用戶進行任何點擊之前進行綁定。你應該把它放在「$(document).ready(function(){});」塊。刪除標記中明確的onclick =「doSomethingElse()」,因爲它是多餘的。 –