2009-12-03 64 views
0

在我的HTML頁面中,我寫道:jQuery選擇行爲古怪

$('div > input').click(function(){ 
      alert(1);    
}); 

我的DIV是這樣的:

<div id="CPE202" class="course"> 
      <input type="checkbox" name="core" value="core" /> 
      Microprocessor programming 
      <input type="radio" name="remove" value="remove" class="remove"/> 
</div> 

那麼它不能正常工作時,該頁面運行。這些代碼的目的是在單擊單選按鈕時嘗試提醒1。奇怪的是,當我使用Firebug進行調試時,我輸入的內容和上面的函數完全一樣,並且工作正常。這裏有什麼問題?

謝謝。

[編輯]我在這裏提到的已經是在正確的地方,裏面的$(document),這意味着....

我也試過這樣:

$('div input').click(function(){ 
       alert(1);    
    }); 

這:

$('input:radio').click(function(){ 
       alert(1);    
    }); 

它們都不起作用。這似乎是任何複雜的選擇,我在這裏使用是沒有用某種方式:(

對不起,我在這裏做。我有嘗試

$('div > input').css({ border: '1px solid red' }); 

,但它不也工作的混亂。

1更多的信息是<div id=...>是由另一塊Jquery代碼動態創建的,我想知道是否是原因。

+0

哎呀。五個答案都說同樣的事情。這很有幫助! 爲了澄清,wakandan,您是否使用'$(document)'作爲'$(document).ready(function(){})'的簡寫?或者實際上你的代碼中有什麼? – eyelidlessness 2009-12-03 17:53:06

+0

我倒下了所有無用的重複答案,除了首先發布的答案(順便說一句,對其他人更有幫助)。 – eyelidlessness 2009-12-03 17:56:29

+0

哦。對不起,您好:( – wakandan 2009-12-03 18:01:53

回答

4

新的答案(基於問題編輯):如果您要添加的元素,註冊事件偵聽器之後,這些聽衆不會適用於這些元素(事件監聽器被明確地添加到單個DOM節點,而不是DOM選擇器「真正不知道的」選擇器)。以最簡單的解決方法是使用jQuery的live方法:

$('div > input').live('click', function() { ... }); 

live使用事件代表團的基本實現:在click活動由document DOM節點接收,從div > input冒泡和jQuery會觸發事件當事件冒起來的時候聽取那個元素。

舊的回答:你確定選擇器是失敗點嗎?嘗試$('div > input').css({ border: '1px solid red' });,看看有問題的元素是否受到影響。如果是,那麼很可能有一些早期註冊的點擊處理程序正在使用event.preventDefault()或其他一些方法來阻止您的聽衆被觸發。

+0

絕對正確。非常感謝:D:D – wakandan 2009-12-03 18:16:34

1

什麼意思無法工作?你有執行函數內的代碼onload?like ..

$(document).ready(myfunction) 
+0

是的,當然我已將它放在$(document).. – wakandan 2009-12-03 17:34:35

1

您需要觸發此代碼才能加載: 即,包裝你的聲明

$(function(){ 
    $('div > input').click(function(){ 
       alert(1);    
    }); 
}); 

當頁面加載時JQuery準備就緒會觸發它。

1

確保您的代碼放在回調的內部爲$(document).ready(..)

$(document).ready(function(){ 
    $('div > input').click(function(){ 
     alert(1);    
    }); 
}); 
+0

啊廢話,被@羅德里戈·安西奧毆打了30秒.. :) – JasonWyatt 2009-12-03 17:33:53

0

在這裏工作。您確定您的代碼是在文檔加載後調用的嗎?像

$(function() { 
    $('div > input').click(function(){ 
       alert(1);    
    }); 
}) 
2

上面的腳本是如何嵌入到頁面中的?它是如何被調用的?

你應該把它放在你的HTML像這樣的頭部分:

<html> 
<head> 
    <title>blah</title> 
    <script type="text/javascript"> 
    $(function() 
    { 
    $('div > input').click(function(){ 
     alert(1);    
    }); 
    }); 
    </script> 
</head> 
<body> 
    ... 
</body> 
</html> 
0

使用「each」循環遍歷不同的元素並分配click事件。這工作:

$(document).ready(function() { 
     $('div > input').each(function() { 
     $(this).click(function(){ 
       alert(1);    
     }); 
     }); 
    }); 
+0

我應該把這個放在哪裏?如果在$(document)裏面......那麼它也不起作用。我剛剛嘗試過。謝謝。 :D – wakandan 2009-12-03 18:07:36

+0

如果所涉及的''當時不在文檔中,那麼這並不能解決問題。看修改後的問題。 – eyelidlessness 2009-12-03 18:10:35

+0

將它放入一個函數中,並在您將這些元素動態添加到頁面後調用它。 – 2009-12-04 13:56:55