我不确定这是最佳实践还是完全错误的方法来做到这一点,但我试图动态生成一些函数并在按钮单击时使用它们。这些按钮也是动态生成的。生成的函数
我正在为我的公会网站制作一个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 –