2017-07-18 107 views
0

我有一個ajax生成的下拉列表。當列表生成時,將其發送回如下所示的HTML。 但是,HTML方面onchange()事件似乎沒有啓動。我怎樣才能得到這個工作?html onchange事件不會從ajax生成的下拉列表中調用

function listSess(){ 
var name = document.getElementById("studentID").value; 

$.ajax({ 
    url : "<%=context%>/ListSessionsServlet?name=" + name, 
    type : "POST", 
    async : false, 
    dataType: "json", 
     success : function(data) { 
      var toAppend = ''; 
      $.each(data,function(i,o){ 

       toAppend += '<option>'+o.sessid+'</option>'; 
      }); 

     $('#sessid') 
      .find('option') 
      .remove() 
      .end() 
      .append(toAppend); 

     } 
}); 
} 


<select id="sessid" name="sessid" onchange="listStudents();"> <--onchange not working when getting ajax generated list 
</select> 

回答

0

如果綁定使用,而不是直列作爲標籤屬性的jQuery的變化時,您可以使用jQuery在AJAX回調觸發它:

// Hook up the change event on DOM ready 
$(function() { 
    $('#sessid').change(function() { 
     listStudents(); 
    }); 
}); 

function listSess(){ 
var name = document.getElementById("studentID").value; 

$.ajax({ 
    url : "<%=context%>/ListSessionsServlet?name=" + name, 
    type : "POST", 
    async : false, 
    dataType: "json", 
     success : function(data) { 
      var toAppend = ''; 
      $.each(data,function(i,o){ 
       toAppend += '<option>'+o.sessid+'</option>'; 
      }); 

     $('#sessid') 
      .find('option') 
      .remove() 
      .end() 
      .append(toAppend); 

     $('#sessid').change(); // fire change 
     } 
}); 
} 

<select id="sessid" name="sessid"></select> 

您當前的邏輯構建了新的<options>如果沒有value屬性,它們可能無法正常工作。下面是我可能會改變它:

... 
success : function(data) { 
    var $sessid = $('#sessid'); 
    $sessid.find('option').remove(); 
    $.each(data, function (index, item) { 
     $sessid.append($('<option />').val(item.sessid).text(item.sessid)); 
    }); 
    $sessid.val(data[0].sessid).change(); 
} 
... 
+0

所以我不會重新寫listStudent(),正確嗎?上面的代碼只能訪問它? – thedude865

+0

下拉列表中選擇的值顯示出來,當我選擇它時,它會消失。我應該將.remove()移動到代碼的另一部分嗎? – thedude865

+0

我不確定我瞭解問題所在。您的'

相關問題