2009-06-19 19 views
2

爲了選擇類別,我想使用下拉列表。每個列表包含一個級別的類別。所以它是:頂級,子,subub,sububsub等每個級別通過我的腳本getcat.php動態檢索,它顯示一個<select>對象。如何從PHP中的動態表單元素檢索jQuery更改事件?

到目前爲止,檢索與下面的代碼一起工作。然而,由於它是一種形式,我想獲得最後選定的值,因此我可以擁有類別ID。這不適合我。我試過$("select:last option:selected"),但這不適用於新插入的元素。

選擇類別後,輸入字段必須顯示用戶可以在哪裏創建自己的子類別(在所選類別內)。這也不適用於新元素。

現在,我試着玩.LIVE但不支持更改事件。你們有關於如何改進它的任何提示?

目前我有以下代碼:

$("select").bind("change", function(){ 
    $(this).nextAll().remove(); 
    var value = $(this).val(); 
    $("#currentcat").val(value); 
    if($("select:last option:selected").hasClass('makenew')) { 
     $("#newcat").show(); 
    } 
    else if($("select:last option:selected").hasClass('disabled')) { } 
    else { 
    $.get("getcat.php", { c: value }, 
     function(data){ 
      $("#getcats").append(data); 
     }); 
    $("#newcat").hide(); 
    }  
}); 

然而,正如你可以看到,它不是一個美女。

回答

2

您是否將onchange事件重新綁定到新的選擇框?

+0

不!我發現這是我需要做的。你有關於如何做到這一點的任何提示?我試圖livequery,但我不能得到它的工作.. thx的幫助! – 2009-06-22 09:45:10

+0

沒關係,它的作品! thx的提示! – 2009-06-22 10:22:34

1

如果你想新<option> s到綁定到DOM和在不同瀏覽器的工作,我會建議使用使用document.createElement和document.createTextNode像這樣它們附加到您的選擇:

var opt = document.createElement('option'); 
opt.value = "someValue"; 
opt.appendChild(document.createTextNode("someText")); 
$('#currentcat').append(opt); 

所以不是使用$ .get時,您應該使用$.getJSON來獲取包含要添加到選擇項中的選項的值和文本屬性的JSON對象。從服務器中檢索應該是這樣的JSON對象:

   { "options" : [   
                                    { "text" : "Fishing",  // First element 
                                      "value"  : "5" }, 
                                    
                                    { "text" : "Skiing",  // Second Element 
                                      "value"  : "70" } 
                              ] 
                } 

遍歷對象會是這個樣子:

$.getJSON("getcat.php", { c: value }, function(json) { 
    var $select = $('<select></select>).attr('id','currentcat').attr('name','currentcat').hide(); 
    $.each(json.options, function(i, item) { 
     var opt = document.createElement('option'); 
     opt.value = item.value; 
     opt.appendChild(document.createTextNode(item.text)); 
     $('#currentcat').append(opt);   
    }); 
    $("#newcat").hide(); 
    $('#someDiv').append($select).show(); 
}); 

以上沒有進行測試,並反映了我你的問題的理解。希望有所幫助。