我有一个包含多个选择列表的页面,当使用jQuery的.change()函数更改其中一个选择列表时,我会更改选择列表旁边的范围中的文本。页面加载时,每个范围内都有一些文本(每个范围的文本不同)。问题是当页面加载时,.change()函数循环遍历所有选择列表,改变每个跨度中的文本。在用户选择列表中的其他项目之前,我不希望更改范围中的文本。我不能只检查跨度中是否有文本,因为如果用户确实更改了所选项目,如果有任何文本没关系,我只是不想替换文本时页面加载。那么,如何在页面加载时让.change()函数停止触发?代码:
JS / jQuery的
$(document).ready(function() {
$("select").change(function () {
var txt = $(this).val();
$(this).next('span').text(txt);
}).trigger('change');
});
HTML(重复多次)
<select name="animal[]">
<option value="dog" selected="selected">dog</option>
<option value="cat">cat</option>
<option value="bird">bird</option>
<option value="snake">snake</option>
</select>
<span class="out">text that shouldn't be replaced until user changes selected item</span>
感谢您的帮助!
答案 0 :(得分:5)
您只需要删除此电话:
.trigger('change')
这就是调用你绑定的$("select").change(function () { ... })
处理程序的原因。默认行为是等待change
事件发生... .trigger('change')
或.change()
(无参数)将模拟change
事件,使该处理程序转到工作
答案 1 :(得分:4)
“更改”正在触发,因为您的代码正在告诉它!对.trigger("change")
的调用说,“请运行'更改'事件处理程序”。所以,拿出来。
现在,事情是, reason 你的代码编写方式可能是为了确保<select>
元素的设置真正反映出当时的行为应该是什么用户手动进行相同的更改。例如,有时会有一些表单,其中部分输入应该被禁用,除非将<select>
设置为某个选项。通过在页面加载时触发“更改”事件,代码可以确保这些规则生效。如果你只是拿出那个触发器,事情可能无法正常工作,就是我所说的。该处理程序看起来非常简单,所以可能问题是这段代码是从其他地方剪切并粘贴的。