2013-06-04 56 views
4

我的頁面有三個html選擇標記。jQuery的更改()不起作用

我想這三個選擇標籤具有以下功能:

當我改變SELECTA,不是根據SELECTA selectB自動變化。 當selectB的選項已經創建,當我改變selectB比selectC自動改變selectB。

例如...

第一SELECTA的選項有歌星,影星,selectB只是空的。

當歌手選項選中,selectB自動創建選項 「Lady Gaga的」,「 Celine Dion「,」惠特尼休斯頓「,如果三位歌手創作過,當我選中」Lady Gaga「時,selectC將創建」生日「,」Facebook「,」google +「選項

當檢查影片星標選項時, selectB自動創建選項「Bruce Wi llis「,」馬特達蒙「,」威爾史密斯「,如果三個電影明星創建,當我選中」布魯斯威利斯「時,selectC將創建」生日「,」Facebook「,」谷歌+「選項。

我的問題是...當我改變selectB,$( 「#selectB_id」)變化()無法正常工作

以下是我的javascript代碼:

$(function(){ 
$("#lineselect").change(function() { 
    $.ajax({ 
     url: '/lineflow/ajaxgetselect', 
     type:'POST', 
     data:{ service_id:$("#lineselect option:checked").val() , level:1 }, 
     success: function(res){ 
      var obj = jQuery.parseJSON(res); 

      if($("#lineselect").val() == 0) 
      { 
       $("#second_li").html(""); 
       $("#third_li").html(""); 
      } 
      else if($("#lineselect").val() == 1) 
      { 
       $("#second_li").html(""); 
       $("#third_li").html(""); 
       $("#second_li").html('<select id="service_type" name="service_type"><option value="0">ALL</option></select>'); 
       $("#third_li").html('<select id="service_name" name="service_name"><option value="0">ALL</option></select>'); 
       for(i=0; i<obj.length; i++) 
       { 
        $('#service_type').append($("<option></option>") 
            .attr("value",obj[i].id) 
            .text(obj[i].name)); 
       } 
      } 
      else if($("#lineselect").val() == 2) 
      { 
       $("#second_li").html(""); 
       $("#third_li").html(""); 
       $("#second_li").html('<input type="text" id="url_name" name="url_name"></input>'); 
      } 
      else if($("#lineselect").val() == 3) 
      { 
       $("#second_li").html(""); 
       $("#third_li").html(""); 
       $("#second_li").html('<select id="url_type" name="url_type"><option value="0">ALL</option></select>'); 
       for(i=0; i<obj.length; i++) 
       { 
        $('#url_type').append($("<option></option>") 
            .attr("value",obj[i].id) 
            .text(obj[i].name)); 
       } 
      } 
     }, 
     error: function(obj, status, err){} 

    }); 

}); 

$("#service_type").change(function() {   // this change not work!!! 
    $.ajax({ 
     url: '/lineflow/ajaxgetselect', 
     type:'POST', 
     data:{ service_id:$("#service_type option:checked").val() , level:2 }, 
     success: function(res){ 
      var obj = jQuery.parseJSON(res);    

      $("#third_li").html(""); 
      $("#third_li").html('<select id="service_name" name="service_name"><option value="0">ALL</option></select>'); 
      for(i=0; i<obj.length; i++) 
      { 
       $('#service_type').append($("<option></option>") 
           .attr("value",obj[i].id) 
           .text(obj[i].name)); 
      } 

     }, 
     error: function(obj, status, err){} 

    }); 

}); 

});

+0

試試 「上」 而不是 「變化」:$(...)在( '變', ...) – Atber

+1

@Aber沒有區別......'.change(func)'只是'.on(「change」,func)的快捷方式' – Ian

回答

4

在此行中:

$("#second_li").html('<select id="service_type" name="service_type"><option value="0">ALL</option></select>'); 

正如你看到的,你是#service_type元素添加到DOM,後附加事件處理它。 因此,您必須使用事件委派。這可以通過.on()方法的jQuery來完成:

$('#second_li').on('change', '#service_type', function() { 
    $.ajax({ 
     // 
    }); 
}); 
  • 請注意,您的#second_li元素必須是靜態的頁面上。否則使用其他選擇器。

參考文獻:

  • .on() - jQuery的API文檔
+0

哦!這麼。我必須學習活動代表團的一部分,非常感謝你! – user1770147

4

使用事件代表團:

$("body").on('change', '#service_type', function() { 
    // your code 
}); 
+0

謝謝你幫我處理這個問題^^ – user1770147