2010-08-13 24 views
0

我在一個頁面上有幾個動態創建的鏈接和表單,分別以ID sub_comment_form_[id]sub_add_comment_[id]命名。我想:jQuery選擇器不工作或無法綁定事件

  1. 隱藏所有形式的頁面加載時
  2. 綁定click事件,直接的形式上面的鏈接隱藏/顯示形式。

我不知道如果有一個問題,我選擇,或者如果jQuery的根本不允許一次多個對象結合。這裏是我的代碼:

HTML

<a href="#" id="sub_add_comment_to_answer_[id]">Add comment</a> 
<form id="sub_comment_form_to_answer_[id]"... 

jQuery的

$("form[ @id^='sub_comment_form' ]").hide(); 

$("a[ @id^='sub_add_comment' ]").click(function() { 
    var sibform = $(this).next("form"); 

    if (sibform.is(':hidden')) { 
    $(this).text('Cancel'); 
    sibform.slideDown('fast'); 
    } else { 
    $(this).text('Add comment'); 
    sibform.slideUp('fast'); 
    } 
}); 
+0

感謝@Nick和@BigRossLabs。我編輯了這個問題以消除錯字,並解決了缺少'@'的根本問題。 – 2010-08-13 03:10:10

回答

4

如果你正在使用jQuery的新版本(1.3+)有關於屬性選擇沒有@了,它看起來像這樣:

$("form[id^='sub_comment_form']").hide(); 
//and.. 
$("a[id^='sub_add_comment']").click(function() { 

這第一個也是缺少一個右括號,所以一定要解決這個問題太:)

而且,可以肯定的這兩種包裝在document.ready處理程序,以便他們執行後的DOM準備好,就像這樣:

$(function() { 
    $("form[id^='sub_comment_form']").hide(); 
    $("a[id^='sub_add_comment']").click(function() { ... }); 
}); 

或者,替代這些ID開始,有選擇,你可以使用一個類,例如:

<a href="#" class="addComment">Add comment</a> 

,並將其綁定這樣的:

$("a.addComment").click(function() { ... }); 
2

1號線缺少結束的「]」所以它應該是...

$("form[@id^='sub_comment_form']").hide(); 
+0

+1對於銳利的眼睛。謝謝! – 2010-08-13 03:10:26

1

這也是一個很好的做法,包含前綴與jQuery的對象變量一美元。

var $sibform = $(this).next("form"); 

這樣你總是知道你什麼時候處理jQuery對象而不是。從而阻止你自己綁定一個jQuery對象。