Флажок (флажки) Javascript onclick / onchange

#javascript #checkbox #onclick #click #onchange

#javascript #флажок #onclick #нажмите #onchange

Вопрос:

Я пытаюсь определить, когда произошло изменение флажка (флажков), но до сих пор безуспешно пытался использовать onchange, onclick и [just] click. Я «унаследовал» HTML для флажков (созданных с помощью шаблонов Smarty), которые созданы в соответствии с here:-

 <input type="checkbox" name="field1[]" id="field1_1" value="80000" />
<label for="field1_1">80000</label>
<input type="checkbox" name="field1[]" id="field1_2" value="80001" />
<label for="field1_2">80001</label>
<input type="checkbox" name="field1[]" id="field1_3" value="80002" />
<label for="field1_3">80002</label>
<input type="checkbox" name="field1[]" id="field1_4" value="80003" checked />
<label for="field1_4">80003</label>
<input type="checkbox" name="field1[]" id="field1_5" value="80004" />
<label for="field1_5">80004</label>
<input type="checkbox" name="field1[]" id="field1_6" value="80005" />
<label for="field1_6">80005</label>  

В javascript я объявляю объект для флажков, как указано здесь:-

 <script>
parent_obj_field1 = document.getElementsByName('field1[]');
</script>
  

Затем я объявляю функцию ‘click’ для этого объекта, который сам предназначен для запуска другой функции ‘retrieve’. Более поздняя функция извлечения выполняет вызов AJAX на основе значений флажков и заполняет другой элемент управления.

 <script>
parent_obj_field1[0].click = function() { 
  child_obj_field3_retrieve_data(); 
}
</script>
  

Я заменил «щелчок», показанный здесь, на «при изменении» и «onclick», но безрезультатно. Я прочитал несколько статей, в том числе одну, в которой говорится, что мне, возможно, придется добавить прослушиватель событий… но я не совсем уверен в синтаксисе, необходимом в моем случае?

Не могли бы вы посоветовать, как я запускаю событие, когда пользователь нажимает / снимает любой из флажков в коллекции?

Спасибо

Редактировать

Итак, чтобы расширить комментарий Саурабха Шриваставы, я добавил

 parent_obj_field1[0].addEventListener('change', function (event) {alert('changed') });
  

но не появляется предупреждение, когда я нажимаю на любой из флажков? Возможно, я неправильно понимаю, как это работает?

Комментарии:

1. Не могли бы вы предоставить jsfiddle с тем, что у вас есть на данный момент, чтобы мы могли протестировать и проверить проблему для себя.

2. Вы прикрепляете обработчик событий field1[] только к первому элементу, и если вы хотите прикрепить его к остальным элементам, вам придется выполнить итерацию. Если вы хотите присоединить его к динамически генерируемым элементам, полученным с помощью ajax, вам необходимо присоединить обработчик событий после загрузки и вставки элементов или использовать делегированный обработчик событий, что может быть немного сложнее, если не использовать библиотеку (например, jQuery).

3. используйте этот код parent_obj_field1[0].addEventListener('change', function (event) { }

4. привет… Означает ли добавление этого прослушивателя событий, что мне не нужно изменять HTML-теги?

5. Итак, я добавил parent_obj_field1[0].addEventListener(‘change’, функция (событие) {оповещение (‘изменено’) }); но не получаете предупреждение, когда я нажимаю на любой из полей? Возможно, я неправильно понимаю, как это работает?

Ответ №1:

Добавьте onclick="toggleCheckbox(this)" в каждый из ваших флажков. Затем используйте этот javascript.

 <script>

function toggleCheckbox(item)
 {
   alert(item.id);
 }

</script>
  

Комментарии:

1. Привет… Согласно Рахулу Пателю….. К сожалению, поскольку я «унаследовал» способ построения HTML, было бы сложно добавить onclick к тегам ввода.

Ответ №2:

Используйте атрибут onchange в HTML и используйте в нем обычную функцию и передавайте this object в качестве аргумента в нем.

Вы можете легко установить флажок установлен или нет в функции и выполнить соответствующую операцию.

Пожалуйста, проверьте приведенный ниже фрагмент

 function change_checkbox(el){
  if(el.checked){
    alert(el.value " : checked");
  }else{
    alert(el.value " : un-checked");
  }
}  
 <input type="checkbox" name="field1[]" onchange="change_checkbox(this)" id="field1_1" value="80000" /> <label for="field1_1">80000</label>
<input type="checkbox" name="field1[]" onchange="change_checkbox(this)" id="field1_2" value="80001" /> <label for="field1_2">80001</label>
<input type="checkbox" name="field1[]" onchange="change_checkbox(this)" id="field1_3" value="80002" /><label for="field1_3">80002</label>
<input type="checkbox" name="field1[]" onchange="change_checkbox(this)" id="field1_4" value="80003" checked /><label for="field1_4">80003</label>
<input type="checkbox" name="field1[]" onchange="change_checkbox(this)" id="field1_5" value="80004" /><label for="field1_5">80004</label>
<input type="checkbox" name="field1[]" onchange="change_checkbox(this)" id="field1_6" value="80005" /><label for="field1_6">80005</label>  

Комментарии:

1. Привет… К сожалению, поскольку я «унаследовал» способ построения HTML, было бы сложно добавить onchange к входным тегам.

Ответ №3:

Изменение jQuery должно сделать свое дело.

Событие изменения отправляется элементу при изменении его значения. Это событие ограничено <input> элементами, <textarea> блоками и <select> элементами. Для флажков, флажков и переключателей событие запускается немедленно, когда пользователь делает выбор с помощью мыши, но для других типов элементов событие откладывается до тех пор, пока элемент не потеряет фокус.

https://api.jquery.com/change/

 $( ".change-selector" ).change(function() {
  //execute your code
});

<input class="change-selector" type="checkbox" name="field1[]" id="field1_1" value="80000" /> <label for="field1_1">80000</label>
<input class="change-selector" type="checkbox" name="field1[]" id="field1_2" value="80001" /> <label for="field1_2">80001</label>
<input class="change-selector" type="checkbox" name="field1[]" id="field1_3" value="80002" /><label for="field1_3">80002</label>
<input class="change-selector" type="checkbox" name="field1[]" id="field1_4" value="80003" checked /><label for="field1_4">80003</label>
<input class="change-selector" type="checkbox" name="field1[]" id="field1_5" value="80004" /><label for="field1_5">80004</label>
<input class="change-selector" type="checkbox" name="field1[]" id="field1_6" value="80005" /><label for="field1_6">80005</label>