2017-07-07 332 views
2

我使用了.on("change")事件函數,因爲我的整個代碼中有一部分動態地改變。 .trigger("change").change()中正常工作,但不在.on("change")上。這裏是我的代碼:.trigger(「change」)在.on(「change」)中不起作用

$('#popupContent').on('change', '#gradeYearLevel', function() { 
     var $course = $('#course'); 
     var $section = $('#section'); 

     if ($(this).val() > 4) { 
      $type = 0; 
     } 
     else { 
      $type = 1; 
     } 
     if ($('#gradeYearLevel').val() == '') { 
      $course.empty().append($("<option>", {"value": ""}).html("-- Select --")); 
      $section.empty().append($("<option>", {"value": ""}).html("-- Select --")); 
     } 
     else { 
      $.getJSON(BASE_PATH + "getJSONCoursesByType/" + $type, function(data) { 
       $course.empty().append($("<option>", {"value": ""}).html("-- Select --")); 
       $.each(data, function(k,v){ 
        $course.append(
         $("<option>", {"value": v.id}).html(v.title) 
        ); 
       }); 
      }); 
      $.getJSON(BASE_PATH + "getJSONSectionsByType/" + $type, function(data) { 
       $section.empty().append($("<option>", {"value": ""}).html("-- Select --")); 
       $.each(data, function(k,v){ 
        $section.append(
         $("<option>", {"value": v.id}).html(v.name) 
        ); 
       }); 
      }); 
     } 
    }).trigger("change"); 

回答

1

的問題是因爲你觸發#popupContent元素上change事件從on()返回,其委派的事件處理程序監聽#gradeYearLevel

您需要在子元素上調用trigger(),以便事件可以冒泡。試試這個:

$('#popupContent').on('change', '#gradeYearLevel', function() { 
    // your code here... 
}) 

$('#gradeYearLevel').trigger("change"); 
+0

我也試過,但仍然沒有效果。我上次測試了一個簡單的代碼,例如: $('#button1')。on('change',function etc .. with .trigger(「change」);最後但不起作用 – Linacel

+0

'#gradeYearLevel'當你調用'trigger()'的時候DOM中存在元素? –

+0

也許不是,爲什麼我使用函數.on()而不是.change()。 – Linacel