选择下拉列表项而不触发onchange事件?

时间:2014-07-22 11:33:59

标签: javascript php

我想填充包含多个项目的下拉列表,并选择一个默认项目:

<select onchange="DoSomething(this)">
    <option value="abb">This is the second item</option>
    <option value="abc" selected>This is the third item</option>
    etc...
</select>

但是我不希望触发onChange事件(或者我希望忽略onChange触发的代码),直到用户选择一个项目。当onChange事件在页面加载时触发,默认选择所选项目。

我可以用PHP包装这段代码来实现这个目标 - 如果是这样的话?

1 个答案:

答案 0 :(得分:0)

?!

直接在JavaScript中操作HTML DOM不会触发事件。您甚至可以调用myForm.submit(),浏览器不会触发表单的onsubmit事件,因此会绕过客户端的onsubmit验证。

我不知道你尝试了什么,但这是一种选择例如下拉列表第一项的方法:

document.getElementsByTagName('select')[0].getElementsByTagName('option')[0].selected = true;

http://jsfiddle.net/Jawh6/

原油,我知道。通常,您的表单和字段将被命名或以其他方式标识,以便您可以更明确地解决它们:例如: document.myForm.mySelect.options[0].selected = true;


由于您的PHP已经在选项上设置了'selected'属性(或者您的问题没有很好地标记),这将是在页面加载时设置默认选项的最佳位置,不需要JavaScript所有。

如果您对如何让PHP写出选择元素的HTML并将所选属性正确地分配给预期选项感兴趣,我认为您需要编写一个新问题来吸引PHP民众。


要么你对DoSomething函数有其他调用,要么你过分简化了你的例子,你实际上是使用框架将事件处理程序绑定到字段,也许你不小心调用了你的函数而不是分配它,例如:

mySelect.onchange = DoSomething(); // oops, this calls DoSomething right away.

mySelect.onchange = DoSomething; // this sets DoSomething as the event handler.