如何复制其他元素onclick函数

时间:2011-03-07 18:48:09

标签: javascript html javascript-events

通过这样做,我已经能够成功获得另一个元素onclick函数:

document.getElementById(this.options[this.selectedIndex].text).getAttribute('onclick')

这给了我确切的文本,我想把它放在onchange事件的不同元素中,所以我想我可以这样做:

<select onchange="document.getElementById(this.options[this.selectedIndex].text).getAttribute('onclick')">

但这不起作用。有没有人有任何想法,我很难过!非常感谢提前!

3 个答案:

答案 0 :(得分:3)

您不能只将函数转储到这样的属性中。我建议你开始写unobtrusive JavaScript

HTML

<select id="mySelect">
    <!-- snip -->
</select>

的JavaScript

var select = document.getElementById('mySelect');
select.onchange = function () {
    var id = this.options[this.selectedIndex].text,
        clickHandler = document.getElementById(id).onclick;
    clickHandler.apply(this);
};

Demo →


编辑重新:OP的评论

  

“是否有一种简单的方法可以将其应用于页面上的所有选择?”

当然有!但是你需要注意不要在循环中创建函数(它不起作用)。

var selects = document.getElementsByTagName('select'),
    numSelects = selects.length,
    i;

function setClickHandler(element) {
    element.onchange = function () {
        var id = this.options[this.selectedIndex].text,
            clickHandler = document.getElementById(id).onclick;
        clickHandler.apply(this);
    }
}

for (i=0; i<numSelects; i++) {
    setClickHandler(selects[i]);
}

答案 1 :(得分:0)

我没有测试过这个,但也许:

var handler = document.getElementById(this.options[this.selectedIndex].text).getAttribute('onclick');

var selectEl = document.getElementsByTagName('select')[indexOfSelect];

selectEl.setAttribute('onClick',handler);

以下作品(除了在select元素上使用'onFocus'属性外,或多或少与上述相同):

var handler = document.getElementById('first').getAttribute('onclick');
var selectEl = document.getElementsByTagName('select')[0];
selectEl.setAttribute('onfocus',handler);

JS Fiddle demo

答案 2 :(得分:0)

这不是推荐的,而是最简单的修复方法,

<select onchange="function() {document.getElementById(this.options[this.selectedIndex].text).getAttribute('onclick')();}">