2015-04-17 58 views
0

我一直在試圖通過編寫一個簡短的腳本來理解jQuery委託,但我遇到了2個問題。如何獲取jQuery事件委託中的選定元素?

<!DOCTYPE html> 
<html> 
<head> 
    <script src="jquery.min.js"></script> 
</head> 

<body> 
    <input type="text" id="text" /> 
    <div id="msg"></div> 

    <script> 
     function showMsg() { 
      if ($("#text").val() === "") { 
       $("#msg").html("Your input is empty"); 
      } else { 
       $("#msg").html("You have entered something") 
      } 
     } 

     $("#text").on("blur", showMsg()); 
    </script> 
</body> 

1)。此事件代表團不按預期工作,消息"Your input is empty"始終顯示自己無限期。如何解決這個問題? 2)。在showMsg()函數中,我必須明確使用$("#text")來使腳本正常工作,如果我使用$(this),它將不起作用。如果我有很多需要使用此函數的輸入字段,是否可以統一定義函數,以便這些輸入字段可以使用它,而無需更改函數中的任何內容?

+0

1)沒有事件代表團。 2)你甚至沒有綁定一個處理程序。你正在調用一個函數。在'showMsg'後面放下'()' –

回答

2

所有你需要做的是改變

$("#text").on("blur", showMsg()); 

$("#text").on("blur", showMsg); 

這也將解決您的$(this)問題。你現在可以設置它。

+0

謝謝你,但是問題2的帽子?有沒有一種方法來定義函數,以便它可以用於多個輸入? – Drexel

+1

當你包含括號時,函數立即運行,並且由於該函數沒有返回任何內容,所以你基本上認爲模糊不做任何事情。通過省略括號表示模糊運行存儲在變量showMsg中的函數。 – scoota269

+0

哦,現在我明白了,現在可以通過刪除括號來解決這兩個問題。非常感謝! – Drexel

相關問題