2016-01-08 3 views
0

Сводка: Я пытаюсь заставить событие изменения активировать элемент HTML, не изменяя его, но событие, похоже, не срабатывает.принудительно изменить событие на элемент DOM без его фактического изменения

Мой сценарий: Существует страница (созданная кем-то еще), которая предназначена для скрыть определенные поля до тех пор, пока не будет выбрано значение из определенного выпадающего списка, после чего появятся зависимые поля. Но в некоторых сценариях раскрывающийся список должен быть автопопулен, а поля должны отображаться по умолчанию. Поэтому я пытаюсь обмануть страницу, показывая зависимые поля при первой загрузке. Я делаю что-то вроде этого:

form.field('THEDROPDOWNFIELD').$el.trigger('change'); 

Но ничего не происходит. Я обнаружил, что

form.field(‘THEDROPDOWNFIELD’).setValue(form.field('THEDROPDOWNFIELD').$el[0][1].value); //dummy value, first value in the list 
form.field('THEDROPDOWNFIELD').$el.trigger('change'); 

запустит событие изменения. По какой-то причине $ el.trigger ('change') не вызывает изменения, если значение элемента DOM действительно не изменилось. Проблема в том, что я не хочу, чтобы в этом выпадающем списке было фиктивное значение.

Резюме (опять же): Есть ли способ заставить событие смены элемента выпадающего списка срабатывать, когда выбранное значение в выпадающем меню фактически не изменилось?

+0

Вы отметили этот вопрос тегом 'jquery'; это не похоже на код jQuery. Что такое '$ el'? От куда это? Как выглядит HTML-код? – Pointy

+1

Я думаю, что $ el - от Магической Короны. Это способ получить свойства элемента. –

+0

ОК, ну ответ «да», по крайней мере через jQuery, но я не могу сказать вам, как это сделать, не видя разметки (и я, конечно, не знаю, является ли ваш обработчик событий также jQuery) , Еще один трюк (опять же, с jQuery) заключается в том, чтобы установить обработчики для собственных событий, чтобы также можно было использовать пользовательские события «сопутствующие». Это позволяет избежать некоторых проблем, таких как события «щелчка» на таких вещах, как флажки. – Pointy

ответ

1

Этот фрагмент кода работает нормально (использует JQuery):

$('#toChange').bind('change', function() { 
 
\t $('#result').text('select changed'); 
 
}) 
 

 

 
$('#triggerChange').bind('click', function() { 
 
\t $('#toChange').trigger('change'); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<form> 
 
    <select id="toChange"> 
 
     <option>---</option> 
 
     <option>First</option> 
 
     <option>Second</option> 
 
     <option>Third</option> 
 
    </select> 
 
</form> 
 

 
<br> 
 
<button id="triggerChange">Click to trigger change</button> 
 

 
<div id="result"></div>

1

не кажется, Ваш код, терпит неудачу, поэтому оно должно быть что-то связано с DOM или тем, как другой парень реализовал этот эффект. Трудно догадаться, какова может быть ваша проблема. Поэтому мое предложение заключается в следующем:

  1. Проверьте, если его действительно реализован запуск по изменению RadioButton, а не на обработчик событий нажмите на DIV/другой элемент, который непосредственно не связанные с радио-кнопки.
  2. Проверьте, не поврежден ли ваш код HTML.
  3. Предоставьте дополнительные фрагменты кода, которые, по вашему мнению, могут быть связаны.