我不確定這是最佳實踐還是完全錯誤的方法來做到這一點,但我試圖動態生成一些函數並在按鈕單擊時使用它們。這些按鈕也是動態生成的。生成的函數
我正在爲我的公會網站製作一個twitch流切換器,而不是爲每個註冊的流器手動添加越來越多的代碼,我只想添加一個函數調用。現在我有這個:
<script id="buttonScripts">
twitchStatus('player1');
twitchStatus('player2');
twitchStatus('player3');
function twitchStatus(twitchName){
$.getJSON('https://api.twitch.tv/kraken/streams/' + twitchName, function(streamData){
if (streamData.stream == null){
$(twitchButtons).append('<button type="button" class="btn btn-fill btn-round" onclick="' + twitchName + 'Function();">' + twitchName + '\'s Stream<img src="images/toffline.png"></button>');
$(buttonScripts).append('function ' + twitchName + 'Function() {var StreamObject = document.getElementById("live_embed_player_flash");if (StreamObject != null) {StreamObject.setAttribute(\'data\', \'http://www.twitch.tv/widgets/live_embed_player.swf?channel=' + twitchName + ');}}');
} else {
$(twitchButtons).append('<button type="button" class="btn btn-fill btn-round" onclick="' + twitchName + 'Function();">' + twitchName + '\'s Stream<img src="images/tonline.png"></button>');
$(buttonScripts).append('function ' + twitchName + 'Function() {var StreamObject = document.getElementById("live_embed_player_flash");if (StreamObject != null) {StreamObject.setAttribute(\'data\', \'http://www.twitch.tv/widgets/live_embed_player.swf?channel=' + twitchName + ');}}');
}
})
};
</script>
腳本生成的按鈕和函數,如果它檢測到他們打開或關閉,但使用不同的PNG來顯示狀態。該函數本身修改嵌入對象以用所選流拖網URL替換流的URL,並且當它不是通過該函數生成時,它完美地工作。
生成的函數會附加到腳本的底部,以便它們位於同一組腳本標記中。有什麼我失蹤,會阻止他們從按鈕onclick調用訪問?
不可以。您應該使用閉包而不是某種形式的'eval'。 – Bergi
你在控制檯上有什麼錯誤? – brso05
twitchswitcher.html:1 Uncaught ReferenceError:player1Function is not defined –