簡體   English   中英

jQuery生成的DOM元素事件處理程序挑戰

[英]jquery-generated DOM elements event handler challenge

我正在使用jquery / ajax / json動態構建頁面:

 $(function() { $("#dv_tools").append("<ul></ul>"); $.getJSON( "assets/json/tools.json", function( data ) { var tools = []; $.each( data.tools, function( key, val ) { tools[val["id"]]=val; }); $.each( data.audiences, function( key, val ) { // selector list $("<li><label><input type=radio name=audience value="+val["id"]+">"+val["name"]+"</label></li>").appendTo("#audience_list"); // selection content $("<li id=cat"+val["id"]+" class=vcat></li>").html(val["id"] + "::" + val["name"]).appendTo("#dv_tools ul"); }); }); $("input[name=audience]:radio").change(function () { $("#dv_tools ul").find('li').each(function() { if($(this).prop('id')=="cat"+$("input[name=audience]:checked").val()) $(this).show(); else $(this).hide(); alert("here!"); }); }); $('input[name=audience]:radio[value=2]').attr('checked', 'checked'); }); 
 <ul id="audience_list"></ul> ... <div id="dv_tools"></div> 

假定要做的是建立一個單選按鈕選擇器列表,單擊每個項目后,下面的內容應動態更改。

DOM構建正確:我在下面看到我的列表和內容,沒問題。 但是事件處理程序沒有觸發...

因此,這部分代碼不起作用:

  $("input[name=audience]:radio").change(function () { $("#dv_tools ul").find('li').each(function() { if($(this).prop('id')=="cat"+$("input[name=audience]:checked").val()) $(this).show(); else $(this).hide(); alert("here!"); //not working :( }); }); $('input[name=audience]:radio[value=2]').attr('checked', 'checked'); 

但是,當我直接用HTML對列表元素進行硬編碼時,它確實起作用。 我覺得我缺少一些簡單的東西,而它的出現可能是由於我對jquery / js的淺淺理解。

謝謝

添加json:

{
"audiences": [
    {"id":"1","name":"Plan Sponsor (existing)","tools":"1,2,3,9"},
    {"id":"2","name":"Plan Sponsor (prospect)","tools":"4,6,2,3"},
    {"id":"3","name":"Professional Employer Organization (PEO) (existing)","tools":"1,2,3,7"},
    {"id":"4","name":"Professional Employer Organization (PEO) (prospect)","tools":"1,2,3,5"}        
],
"tools": [
    {"id":"1","name":"tool1","desc":"some description"},
    {"id":"2","name":"tool2","desc":"some description"},
    {"id":"3","name":"tool3","desc":"some description"},
    {"id":"4","name":"tool4","desc":"some description"},
    {"id":"5","name":"tool5","desc":"some description"}
]

}

getJSON是異步的,這意味着您的可疑代碼(以$(“ input [name = audience]:radio”:radio“開頭).change是在getJSON完成之前執行的,因此在創建單選按鈕之前,因此不會為您的事件監聽器選擇。

嘗試在創建單選按鈕后立即將代碼移到getJSON回調中,它將像超級按鈕一樣工作!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM