2012-02-23 4 views
0
$(document).ready(function(){ 
    console.log("1"); 
    $('#selectid').triggerHandler('change'); 
    $('#selectid').trigger('change'); 
    $('#selectid').change(); 
    console.log("2"); 
    $('#intervention1-form').change(function() { 
     console.log('WHY DOESNT THIS HAPPEN?'); 
    }); 
}); 
console.log("0"); 

Консольный вывод должен быть:триггер не работает под нагрузкой

0 
1 
WHY DOESNT THIS HAPPEN? 
2 

Но вместо этого, это просто:

0 
1 
2 

Контекст, что я заселение в HTML-элемент с различными когда выбирается меню select (selectid). Однако, когда первая страница загружается, я хочу вызвать меню выбора, как если бы оно было изменено, так что элемент HTML имеет контент, даже если пользователь не изменяет меню выбора.

ответ

0

прикрепить обработчик изменения с лог консоли в ней, после того, как вы уже вызвали изменения.

так что вы будете ловить только изменить события, которые происходят с момента привязки обработчика изменений, а не те, которые происходили до этого

изменяя свой код, чтобы это позволило бы решить проблему:

$(document).ready(function(){ 
    $('#intervention1-form').change(function() { 
     console.log('WHY DOESNT THIS HAPPEN?'); 
    }); 
    console.log("1"); 
    $('#selectid').triggerHandler('change'); 
    $('#selectid').trigger('change'); 
    $('#selectid').change(); 
    console.log("2"); 
}); 
console.log("0"); 

теперь у вас есть желаемый результат, потому что вы связали обработчик изменений, прежде чем запускать его.

+1

не быть неблагодарным, но, честно говоря, ради этого сообщества и помогая другим с подобными проблемами, я голосую за то, чтобы сделать ответ Шанкарсанголи правильным. Он был первым и лучше объяснен, чем мой. – Sander

1

Потому что после этого вы прикрепляете обработчик кликов. trigger("change") выполняет все обработчики и поведение, связанные с соответствующими элементами для события change. Если обработчик не прикреплен, то выполнить нечего.

Попробуйте это.

$(document).ready(function(){ 
    console.log("1"); 
    $('#intervention1-form').change(function() { 
     console.log('WHY DOESNT THIS HAPPEN?'); 
    }); 
    $('#selectid').change(); 
    console.log("2"); 
}); 
console.log("2"); 

Side Примечание: Вызов trigger("change") или change() метод является один и тот же.

метод

.triggerHandler() ведет себя подобно .trigger(), с следующими исключениями:

  • Метод .triggerHandler() не вызывает поведение по умолчанию события происходят (например, представление формы).
  • Хотя .trigger() будет работать со всеми элементами, согласованными с объектом jQuery, .triggerHandler() влияет только на первый согласованный элемент.
  • События, созданные с помощью .triggerHandler(), не выравнивают иерархию DOM; если они не обрабатываются целевым элементом напрямую,
    ничего не делают.
  • Вместо того, чтобы возвращать объект jQuery (чтобы разрешить цепочку), .triggerHandler() возвращает любое значение, возвращаемое последним обработчиком
    , который он вызвал. Если нет обработчики не срабатывают, он
    возвращает неопределенное
+0

Спасибо, это была проблема! Не могу поверить, что я пропустил это. :) – brentonstrine

Смежные вопросы