3

我正在使用 Javascript 创建 HTML DOM 元素(是的,我知道这很讨厌)。
我可以创建选择元素,但无法添加 onchange 属性。

例子:

var sel = document.createElement('select');
sel.id = 'someID';
sel.title = 'Some title';
sel.style.fontWeight = 'bold';
sel.size = 1;

一旦我添加了选项并完成了一个
document.getElementById('someOtherID').appendChild(sel);
我得到我的选择元素。

我想要做的是,在上面的 A 处,添加:
sel.onChange = 'someJavascriptFunction()';
但它不喜欢它。

我应该在广场之外思考吗?哪一个?

4

4 回答 4

3

The event name should be lowercase, and you need to assign a function instead of a string.

sel.onchange = someJavascriptFunction;

If there's more work to do, you can assign an anonymous function.

              //  v----assign this function
sel.onchange = function() {
    // do some work
    someJavascriptFunction();  // invoke this function
};
于 2013-02-24T03:42:15.133 回答
0

You should be doing something like this:

sel.onChange = someJavascriptFunction;

(notice that there are no parens after someJavascriptFunction. This means you are attaching the function, not the invocation of the function.

于 2013-02-24T03:35:32.103 回答
0

如果您有可能将多个函数绑定到该事件,您将希望使用这种稍微冗长的方法。

if (sel.addEventListener) {
    sel.addEventListener('change', changeFunction, false);
} else if (sel.attachEvent) {
    sel.attachEvent('onchange', changeFunction);
} else {
    sel.onchange = changeFunction;
}
于 2013-02-24T03:54:57.627 回答
0

完成整个事情的更简单方法是:页面中已经存在的某个位置:

<div id=someContainer></div>

然后在你的javascript中这样做:

document.getElementById('someContainer').innerHTML = "<select id=someId title='some title' size=1 style='font-weight: bold' onchange='someJavascriptFunction()' >";

或更慢:

var html = "<select id=someId title='some title' size=1 style='font-weight: bold' onchange='someJavascriptFunction()' >";

var someContainer = document.getElementById('someContainer');

someContainer.innerHTML = html;

document.getElementById() 很常见,你可能有一个库,如 jquery 或原型,更容易做到这一点,如 $('someContainer'),或者自己定义它(var $ = document.getElementById;)。

innerHTML 是每个 dom 元素上的伪变量,它返回或设置您执行它的元素内的所有 html。你可以传递任意长的 HTML,如果你愿意,我猜是整个页面。你可以编写一个巧妙的程序来构建 html 文本,他们甚至有模板系统,比如 hogan (google it)。

于 2013-10-17T06:01:20.553 回答