从on()函数返回变量 - jquery

时间:2014-07-02 02:31:35

标签: javascript jquery

也许我只是看得太近但我不知道为什么我没有返回更新的变量。

Javascript

var playlist_id="000";

$('nav').on("click", "a", function(){
    playlist_id = $(this).attr('rel');
});

console.log(playlist_id); //returns 000, instead of 111

var playListURL = "http://gdata.youtube.com/feeds/api/playlists/"+playlist_id+"?v=2&alt=json&callback=?";

HTML

<li><a id="one" rel="000"><img src="images/season1.jpg" /></a></li>
<li><a id="two" rel="111"><img src="images/season2.jpg" /></a></li>
  • 已更新

我需要访问.on()函数范围之外的playlist_id。

3 个答案:

答案 0 :(得分:4)

我会通过解释事情发生的时间为你解决这个问题,注意评论。希望你会看到playlist_id始终是全局可访问的,你只是没有正确思考它的值何时被设置。

var playlist_id="000";     //<-- I run first, setting playlist_id to '000'
$('nav').on("click", "a", function(){    //<-- I run second, telling my browser that when navs are clicked, to run the code inside the function to set playlist ID
    playlist_id = $(this).attr('rel');   //<-- I do not run until a nav is clicked.
    //Any time after a nav is clicked, if you open up a debugger and check the value of the variable playlist_id, you will see it will have the correct value.
});
console.log(playlist_id);  //<-- I run third. 
                           //Look at the two other statements that have run before me.
                           //What would you expect the value of playlist_id to be? Hint:000

我正在向证明添加一个JSFiddle,并且可以全部访问该值。我按原样保留你的代码,但是每隔500毫秒,我就把playlist_id的值写入日志。打开小提琴,观看控制台日志,然后单击两个图像。您将看到该值在您单击时发生更改,并且可以全局访问。 http://jsfiddle.net/T9YkH/

setInterval(function(){
    console.log(playlist_id);
}, 500);

答案 1 :(得分:0)

.on()始终返回调用它的对象以方便链接。在您的情况下,它返回$('nav')

根据您发布的代码,在发生点击时会分配变量playlist_id。并且您正在尝试在绑定click事件之后但在实际触发之前将其记录在控制台中。

答案 2 :(得分:0)

这一切都没有帮助,所以我回答了这个问题。

这应该被删除,因为它对社区没有帮助。

这是我正在寻找的解决方案:

    var playlist_id="000";

    $('nav').on("click", "a", function(){
        playlist_id = $(this).attr('rel');
        onStart(playlist_id);
    });

    onStart(playlist_id);

    function onStart(playlist_id){
        var playListURL = "http://gdata.youtube.com/feeds/api/playlists/"+playlist_id+"?v=2&alt=json&callback=?";
}