2013-04-17 4 views
22

Возможно ли инициировать событие изменения при установке флажка с помощью javascript/jquery?событие смены триггера jQuery на флажке

Что-то вроде этого (я бегу triggerChange по нажатию кнопки):

<label><input type="checkbox" id="chk"/>Label for chk</label> 

<script> 
function triggerChange(){ 
    $("#chk").trigger("change"); 
} 
</script> 

Когда я запускаю приведенный выше код я получаю эту ошибку: «триггер не является функцией».

+2

Конечно, это возможно. Скорее всего, вы забыли включить jQuery. – VisioN

+0

Я думаю, вас интересует этот вопрос: http://stackoverflow.com/questions/10159214/why-does-dynamically-changing-a-checkbox-not-trigger-a-form-change-event Don Не забудьте заглянуть в контекст $ (document) .ready! –

+0

Похоже, '' 'возвращает то, что не является объектом jQuery. Что означает '' 'может не быть jQuery? Также обратите внимание, что при запуске события изменения будут выполняться только обработчики событий изменения, он не изменит состояние флажка. –

ответ

15

Это trigger is not a function сообщение об ошибке указывает на то, что еще находится в игре. В соответствии с этим СЦ вопрос:

What happens when a jQuery selector wasn't found?

no.good.at.coding говорит:

Do note however that you must ensure that selector is a jQuery object! Otherwise, you could get an error indicating that "trigger is not a function".

Вполне вероятно, что вы забыли JQuery?


Что касается вашей реализации, вы должны быть в порядке, как вы ее используете. Но trigger следует использовать для запуска методов событий для элементов, которые уже были добавлены через jQuery. Проверьте мой демо:

Fiddle:
с события нажатия: http://jsfiddle.net/fS4R5/1/
Без события нажатия: http://jsfiddle.net/fS4R5/2/

HTML:

<label><input type="checkbox" id="chk"/>Label for chk</label> 

JS:

function triggerChange(){ 
    $("#chk").trigger("change"); 
} 

$("#chk").change(function() { 
    alert("triggered!"); 
}); 

triggerChange(); 
+0

Если вы не подключены, браузер не будет поднимать * исключение «триггер не является функцией» *. jQuery настроен для него. – VisioN

+0

Спасибо, обновил свой ответ с подробностями об исключении. – Jace

+0

Меня не интересует событие click. У меня есть причины не использовать клик. Я хочу запустить событие изменения, не нажимая флажок. –

4

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

Например, обработчик щелчка могут быть назначены в качестве таковых:

$('#mything').click(function(e){dostuff});

событие щелчка само по себе может быть вызвано просто запустив: $('#mything').click();

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

+2

Вы также можете вызвать его с помощью '.trigger (« click »)'. В этом нет ничего плохого. – VisioN

+0

Меня не интересует событие click. У меня есть причины не использовать клик. Я хочу запустить событие изменения, не нажимая флажок. –

+0

Ну, 'click' был всего лишь примером. Вы также можете заменить его функцией «change». Для справки: http://api.jquery.com/change/ –

1

Я думаю, что предпочтительный метод, начиная с 1.9.1, является «включен». Особенно если вы используете динамически добавленные флажки.

Скажем у вас есть DIV с идентификатором = «divCOntent» и на это флажок с идентификатором = «cballaut», вы можете сделать это

$('#divcontent').on('click', '#cballaut', function (e) { 
        alert(this.checked); 
       }); 
+0

Это вряд ли ответит на вопрос. – VisioN

0

использование поддержка способ.

$('#myCheck').prop('checked', true); 
$('#myCheck').prop('checked', false); 
+0

Это не вызовет событие изменения. – xaviert

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