2012-06-04 3 views
0

Предположим, мы имеем следующие разметки:Почему не происходит событие onChange?

<form> 
    <button type="button" id="all">check all</button> 
    <button type="button" id="none">check none</button> 
    <input type="checkbox" value="one" /> 
    <input type="checkbox" value="two" /> 
    <input type="checkbox" value="three" /> 
</form> 

И следующий код JavaScript:

(function($, document) { 
    $('#all').on('click', function() { 
     $('input', $(this).parent()).prop('checked', 'checked'); 
    }); 
    $('#none').on('click', function() { 
     $('input', $(this).parent()).removeProp('checked'); 
    }); 

    $('input').on('change', function() { 
     alert(this.value); 
    }); 
}(jQuery, document)); 

(см http://jsfiddle.net/inst/h7kyq/1/)

Почему обработчик события OnChange Входной не выполняется, когда мы нажимаем на любой из кнопок?

+0

При использовании '.prop()' на логическое свойство, использовать логическое значение. '.prop ('checked', true)' или '.prop ('checked', false)' –

+1

Не используйте removeProp(), если вы не хотите окончательно удалить свойство, поскольку вы не можете снова использовать это свойство элемент. Прочитайте http://api.jquery.com/removeProp/ Как вы можете сказать в своей скрипке, как только вы нажмете кнопку «Удалить все», все функции перестанут работать. –

ответ

1

Любой programatic изменение (из скрипта) к входному элементу не будет вызывать onchange события ..

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

Смотри ниже,

$('input', $(this).parent()).removeProp('checked').change(); 

ДЕМО:http://jsfiddle.net/h7kyq/4/

3

События не срабатывают, когда изменение происходит в javascript. Вам нужно будет стрелять событие само:

$('input', $(this).parent()).removeProp('checked').change(); 
+0

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

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