2013-11-09 88 views
-2

我正在使用基於select元素值更改的ajax表單,將ajax請求發送到服務器,然後返回json字符串。我基於這個json字符串構建第二個表單。問題是我想基於第二個選擇元素值更改(通過JavaScript生成的)第三個選擇元素。在時,我想用變化事件上班這一情況,這是行不通的:jQuery on('change')不起作用

我的JavaScript代碼至今:

jQuery("#make").on('change',function(){ 
     var value = jQuery(this).val(); 
     if(value != 0) 
     { 
      jQuery.getJSON("<?php echo site_url('ajax/get/models'); ?>", 
       {makeId:value}, 
       function(data){ 
        if(data != "false") 
        { 
         var modelsSelect = document.createElement('select'); 
         modelsSelect.setAttribute('name','model'); 
         modelsSelect.setAttribute('id','model'); 
         var modelOption = document.createElement('option'); 
         modelOption.setAttribute('value',0); 
         modelOption.appendChild(document.createTextNode("sample text")); 
         modelsSelect.appendChild(modelOption); 
         jQuery.each(data, function(index, item) { 
          var modelOption = document.createElement('option'); 
          modelOption.setAttribute('value',item.id); 
          modelOption.appendChild(document.createTextNode(item.model.toString())); 
          modelsSelect.appendChild(modelOption); 
         }); 
         jQuery("#model").replaceWith(modelsSelect); 
         return false; 
        } 
        else 
        { 
         return false; 
        } 
       } 
      ); 
     } 
     else 
     { 
      var modelsSelect = document.createElement('select'); 
      modelsSelect.setAttribute('name','model'); 
      modelsSelect.setAttribute('id','model'); 
      modelsSelect.setAttribute('disabled','disabled'); 
      var modelOption = document.createElement('option'); 
      modelOption.setAttribute('value',0); 
      modelOption.appendChild(document.createTextNode("sample text")); 
      modelsSelect.appendChild(modelOption); 
      jQuery("#model").replaceWith(modelsSelect); 
      return false; 
     } 
    }); 
    jQuery("#model").on('change',function(){ 
     alert("change");// THIS DOES NOT WORK 
     return false; 
    }); 

回答

1

你需要爲委派的事件處理程序爲你」用新的動態元素替換#model

jQuery(document).on('change', '#model', function(){ 
    alert("change"); 
    return false; 
}); 
+0

沒錯。但你能解釋一下這個原因嗎? – Ramin

+0

我應該爲每個要處理其事件的元素使用此語法? – Ramin

+0

您應該用#model的最接近的非動態父級替換'document',並且對於動態添加的元素,這是委派事件處理程序的方式。 – adeneo

相關問題