使用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(); } });