每个语句中的jQuery全局变量

时间:2013-11-27 17:02:08

标签: javascript jquery

所以,我试图做到这一点,所以我可以使用jQuery在整个文档中全局创建一个变量,但是在.each()语句中。

我把“var previous = item.channel.display_name”放在我试图创建的变量中。

代码:

jQuery(function(){ 
var streams = null;
jQuery.getJSON("https://api.twitch.tv/kraken/search/streams?q=path%20of%20exile&callback=?", function (data) {
    streams =  data.streams;
    jQuery("#next").show();
    jQuery("#prev").show();
    jQuery("#next").click();
});

var globalCnt = 0;
jQuery("#next").click(function() {
    var localCnt = 0;
    var itemsToShow = 1;
         jQuery.each(streams, function (index, item) {
             localCnt++;
             if(localCnt > globalCnt && itemsToShow > 0) {
             jQuery("#content").empty();
             jQuery("#content").html('<object style="margin-left:0.5%;" type="application/x-shockwave-flash" height="378" width="620" id="live_embed_player_flash" data="http://www.twitch.tv/widgets/live_embed_player.swf?channel=' + item.channel.display_name + '" bgcolor="#000000"><param name="allowFullScreen" value="true" /><param name="allowScriptAccess" value="always" /><param name="allowNetworking" value="all" /><param name="movie" value="http://www.twitch.tv/widgets/live_embed_player.swf" /><param name="flashvars" value="hostname=www.twitch.tv&channel=' + item.channel.display_name + '&auto_play=false&start_volume=25" /></object><iframe frameborder="0" scrolling="no" id="chat_embed" src="http://twitch.tv/chat/embed?channel=' + item.channel.display_name +'&amp;popout_chat=true" height="378" width="350"></iframe>');
                 globalCnt++;
                 itemsToShow--;
                 var previous = item.channel.display_name;
             }
        });
    if(itemsToShow > 0)
        jQuery("#showBtn").hide();
});
jQuery("#prev").click(function() {
    var localCnt = 0;
    var itemsToShow = 1;
         jQuery.each(streams, function (index, item) {
             localCnt++;
             if(localCnt > globalCnt && itemsToShow > 0) {
             jQuery("#content").empty();
             document.write(previous);
             jQuery("#content").html('<object style="margin-left:0.5%;" type="application/x-shockwave-flash" height="378" width="620" id="live_embed_player_flash" data="http://www.twitch.tv/widgets/live_embed_player.swf?channel=' + previous + '&auto_play=false&start_volume=25" /></object><iframe frameborder="0" scrolling="no" id="chat_embed" src="http://twitch.tv/chat/embed?channel=' + previous +'&amp;popout_chat=true" height="378" width="350"></iframe>');
                 globalCnt++;
                 itemsToShow--;
             } 
        });
    if(itemsToShow > 0)
        jQuery("#showBtn").hide();
});
});

2 个答案:

答案 0 :(得分:2)

创建全局变量没有任何问题,但如果你想正确地做这些事情,你必须确定一些事情。

  • 如果可能,只添加一个全局变量,然后将所有代码包装在该变量上。创建许多全局变量并不是一个好主意。

  • 在您的情况下,您应该创建类似:var myApp = myApp || {} 也就是说:myApp等于myApp(如果它已经存在,或者如果myApp以前不存在,myApp将是一个空对象。

然后,这一行: var previous = item.channel.display_name;

将成为: myApp.previous = item.channel.display_name。

答案 1 :(得分:1)

我不是在纵容全局变量,但是如果你想在另一个范围内创建一个,你可以将它添加到window对象中:

window.globalVal = "foo";

window是全局对象上指向自身的属性。向其添加属性等同于创建全局变量。

因此,对于您的情况,您可以

window.previous = item.channel.display_name;

然后从任何地方访问先前 - 假设它没有被遮蔽,当然。在最后一点上,如果我没有提到全局变量通常是一个坏主意,我会失职。请谨慎使用它们。