在DOM元素上强制更改事件而不实际更改它

时间:2016-01-08 22:37:10

标签: javascript jquery html dom marionette

摘要:我正在尝试强制更改事件以触发HTML元素,而不实际更改它,但事件似乎没有触发。

我的方案:有一个页面(由其他人创建),用于隐藏某些字段,直到选择某个下拉列表中的值,此时将显示相关字段。但在某些情况下,下拉列表应自动填充,默认情况下应显示字段。所以我试图欺骗页面在首次加载时显示依赖字段。我做这样的事情:

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元素的值确实发生了变化。问题是我不希望该下拉列表中的虚拟值存在。

摘要(再次):当下拉列表中的选定值实际没有更改时,有没有办法强制下拉列表的元素更改事件触发?

2 个答案:

答案 0 :(得分:1)

此代码段正常(使用JQuery):

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


$('#triggerChange').bind('click', function() {
	$('#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 :(得分:1)

你的代码似乎没有失败,所以它必须是与DOM相关的东西或者其他人实现这种效果的方式。很难猜出你的问题可能是什么。所以我的建议如下:

  1. 检查它是否真正实现了触发radiobutton更改,而不是在div /其他元素上的单击事件处理程序上,而这些元素与单选按钮没有直接关系。
  2. 检查您的HTML代码是否失败。
  3. 提供您认为可能相关的更多代码段。