2017-07-07 340 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