JavaScript onclick事件问题

JavaScript onclick事件问题,javascript,javascript-events,Javascript,Javascript Events,让我首先说我缺乏JavaScript技能,至少可以这么说。我对以下功能有问题: function setClickHandler(element) { element.onchange = function () { var id = this.options[this.selectedIndex].value; if(document.getElementById(id) !== null){ clickHandler = doc

让我首先说我缺乏JavaScript技能,至少可以这么说。我对以下功能有问题:

function setClickHandler(element) {
    element.onchange = function () {
        var id = this.options[this.selectedIndex].value;
        if(document.getElementById(id) !== null){
            clickHandler = document.getElementById(id).onclick;
        } else {
            clickHandler ="runMe('" + this.id + "','" + id + "','','null')"; }
        clickHandler.apply(this);
    }
}
基本上,它所做的是,如果存在一个带有“id”的元素,则使用该元素onclick函数,如果该元素不存在,则在函数中创建该元素。然后将此onclick函数应用于元素

除非“id”不存在,并且它进入else语句,必须在该语句中创建clickHandler,否则一切都可以正常工作。我不明白为什么这行不通。我在记录时注意到,如果clickHandler是从另一个现有id获取的,那么clickHandler会输出类似(onclick.event)的内容,如果它进入else语句,它会输出runMe('24','54','null')


我希望我解释得足够好。任何帮助都将不胜感激,谢谢

在一种情况下,您将
clickHandler
设置为函数,在另一种情况下,您将其设置为字符串

if (...) {
   ...
} else {
   var me = this;
   clickHandler = function() {
      runMe(me.id, id, '', null);
   }
}
...

可能。

在else情况下创建的字符串不能作为函数调用。试试这个

if (document.getElementById(id) !== null) {
    clickHandler = document.getElementById(id).onclick;
    clickHandler.apply(this);
}
else {
    // clickHandler = "runMe('" + this.id + "','" + id + "','','null')";
    var runMeArgs = [this.id, id, '', 'null'];
    runMe.apply(this, runMeArgs);
}

else语句从未触发过吗?@JSager,它会正确触发,只是created onclick事件不会应用于元素。“runMe”是您在某处声明的函数,还是您试图用字符串创建它?@NiklasRingdahi,我正试图用字符串创建它实际上,它是我在其他地方创建的函数,我只是尝试在onclick上调用该函数并发送这些变量。这很接近,但是
runMe
的范围将与OP的代码所指示的范围不同。在维护参数时,您需要使用与runMe.apply(this)等效的函数。