2011-05-12 156 views
1

讓我首先說我的JavaScript技能缺乏,至少可以說。我一直有與下列功能相關的問題:JavaScript onclick事件問題

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函數應用於元素。

一切正常,除非這個「身份證」並不存在,它進入其中對clickHandler必須創建else語句。我不明白爲什麼這不起作用。我注意到,如果clickHandler是從另一個現有的id獲取的,那麼我注意到,然後clickHandler輸出類似於(onclick).event的地方,如果它進入else語句,它會輸出runMe('24','54','','null 「)。

我希望我解釋這不夠好。任何幫助將不勝感激,謝謝!

+0

是else語句從不開火? – JSager 2011-05-12 16:00:26

+0

@JSager,它會正常啓動,只是創建的onclick事件不會被應用到元素。 – Chad 2011-05-12 16:01:48

+0

「runMe」是你在某個地方聲明的函數,還是你試圖用字符串創建它? – 2011-05-12 16:02:00

回答

2

你創建在其他情況下,你不能調用一個函數的字符串。試試這個

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); 
} 
+0

謝謝我認爲這工作! – Chad 2011-05-12 17:20:42

1

在你設置clickHandler的功能,在你將其設置爲一個字符串的其他情況下,一個情況?

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

可能。

+0

好主意,但沒有工作... – Chad 2011-05-12 16:14:00

+0

這很接近,但'runMe'的範圍不會與OP的代碼所指示的範圍相同。你需要在維護參數的同時結束'runMe.apply(this)'。 – lincolnk 2011-05-12 16:21:34

+0

@lincolnk,正好! – Chad 2011-05-12 16:22:48