使用val()函数设置<select>的值时触发change()事件

设置select元素的值时触发change事件的最简单和最好的方法是什么?

我期望执行以下代码

$('select#some').val(10); 

要么

 $('select#some').attr('value', 10); 

会导致触发变化事件,我认为这是相当逻辑的事情要做。 对?

那么,情况并非如此。 您需要通过执行此操作来更改change()事件

 $('select#some').val(10).change(); 

要么

 $('select#some').val(10).trigger('change'); 

但我正在寻找一些解决scheme,一旦select的值被一些javascript代码改变,将触发更改事件。

我有一个非常类似的问题,我不太清楚你有什么问题,因为你build议的代码对我很好。 它立即 (您的要求)触发以下更改代码。

 $('#selectField').change(function(){ if($('#selectField').val() == 'N'){ $('#secondaryInput').hide(); } else { $('#secondaryInput').show(); } }); 

然后我从数据库中获取这个值(这在表单中用于新input和编辑现有logging),将其设置为选定的值,并添加缺less的部分以触发上述代码。 “.change() ”。

 $('#selectField').val(valueFromDatabase).change(); 

因此,如果数据库中的现有值是“N”,它会立即隐藏我的表单中的辅助input字段。

我发现的一件事(困难的方法)是你应该拥有的

 $('#selectField').change(function(){ // some content ... }); 

在您使用之前定义

 $('#selectField').val(10).trigger('change'); 

要么

  $('#selectField').val(10).change(); 

直接的答案已经在一个重复的问题: 为什么不使用val()设置select的值时触发jQuery的更改事件?

正如你可能知道设置select的值不会触发change()事件,如果你正在寻找一个事件,当一个元素的值通过JS被改变时被触发,没有一个。

如果你真的想这样做,我想唯一的办法是编写一个函数,在一个时间间隔内检查DOM,并跟踪更改后的值,但绝对不要这样做,除非你必须(不知道为什么你需要)

增加了这个解
另一个可能的解决scheme是创build自己的.val()包装函数,并在通过.val()设置值之后触发自定义事件,然后在使用.val()包装器设置<select>它会触发您可以捕捉和处理的自定义事件。

一定要return this ,所以它是以jQuery的方式可链接的

我将它分开,然后使用标识比较来指示接下来会做什么。

 $("#selectField").change(function(){ if(this.value === 'textValue1'){ $(".contentClass1").fadeIn(); } if(this.value === 'textValue2'){ $(".contentclass2").fadeIn(); } });