2011-05-09 68 views
1

我寫了一個腳本,將一系列產品加載到div標籤中。jQuery沒有看到我的動態加載複選框

我現在想要使用一系列複選框來過濾這些產品。

jquery向返回XML數據集的ASP頁面發出$ post。數據集的第一個元素包含這種格式的製造商列表ara | dai | sid | alp等。第二個元素包含上述代碼的製造商名稱。

然後我使用這個腳本來創建一個複選框到div標籤列表。

var mc = new Array(); 
mc = $("manCodes",xml).text().split(","); 
var manTitles = new Array(); 
manTitles = $("manTitles",xml).text().split(","); 

for (var i=0, len=mc.length; i<len; ++i){ 
    m += '<span><input type="checkbox" value="' + mc[i] + '" name="man[]" id="man_'+i+'" />' + manTitles[i] +'</span>'//mc[i]; 
    } 
manufacturers = '<div id="filter" class="man">FILTER<br />' + m + '</div>'; 
$(".formSelect").append(manufacturers); 

這工作一種享受,然後在文件準備部分我有一個代碼段,看起來對複選框任意點擊:

$(document).ready(function() { 
    $("input:checkbox").click(function() { 
    loadXML($("#sortOrder option:selected").val(),$("#limitBy option:selected").val(),$("#productGroup").val()); 
    }); 
}); 

這是我的代碼,因爲任何點擊倒下任何複選框都不起作用。它幾乎和JQuery一樣無法看到它創建的這些複選框。

任何人都可以請幫助如何解決這個問題嗎?

乾杯 格雷厄姆

+0

使用['活()'](http://api.jquery.com/live/)... – 2011-05-09 11:20:51

回答

1

你需要事件委託,否則事件處理程序將不會觸發動態插入/刪除的元素。 .live.delegate是兩個選項。

$("input:checkbox").live("click", function() { 
    // implementation 
}); 

或更好:

$("form").delegate("input:checkbox", "click", function() { 
    // implementation 
}); 
1

使用jQuery.live()來捕獲動態添加元素的事件。

附加的處理程序,爲當前 選擇在現在和將來匹配其所有 元素的事件。

$("input:checkbox").live("click", function() { 
    loadXML($("#sortOrder option:selected").val(),$("#limitBy option:selected").val(),$("#productGroup").val()); 
}); 
0

嘗試:

$(document).ready(function() { 
    $("input:checkbox").live("click",function() { 
    loadXML($("#sortOrder option:selected").val(),$("#limitBy option:selected").val(),$("#productGroup").val()); 
    }); 
}); 
+0

這是神速,謝謝非常。它工作得很好,你會介意解釋這是什麼嗎? – EvilKermitSaurus 2011-05-09 11:26:37

+0

當你打電話點擊時,它會將事件綁定到DOM中此刻存在的任何複選框。此事件綁定發生在您創建新複選框之前,因此這些新複選框未附加到事件偵聽器。活方法適用於那些元素(在這種情況下複選框),這被後來補充,這就是爲什麼它被命名爲「活」 – Ankur 2011-05-09 12:09:37

+0

Brillian公司非常感謝你的幫助! – EvilKermitSaurus 2011-05-09 12:55:10