如何在Javascript中访问事件侦听器中的变量

时间:2011-08-03 23:28:22

标签: javascript jquery facebox

我需要在我的javascript中从各种“侦听器”(对于Facebox)中访问一些变量。如何在javascript函数和事件侦听器之间传递变量?

我一直在讨论范围,但似乎声明全局变量有点hacky,特别是一旦你开始考虑其他控件(即我在模态中的结果的分页)不会如此以及全球变量。

这是导致我出现问题的部分:

function song_clarify ()
{       
    // this launches a modal window, fills with html.   
    $.facebox('<div id="search"><div></div></div>');        
}

// AJAX function. when called, this loads the required htmls into the modal
function clarify_loader() 
{
    var loadUrl = "ajax/clarify";   

    $("#search > div")
        .html(ajax_load)
        .load(loadUrl, 'search='+source+'&searchTerm='+song);
}

// Waits for the modal to be revealed before calling AJAX function.
// (if function called outside listener, nothing for the AJAX to bind to as modal appears dynamically)
$(document).bind('reveal.facebox', function() {

    // Problem is here. Need to be able to do clarify_loader(source,song)
    clarify_loader();

})

2 个答案:

答案 0 :(得分:1)

在您使用过的示例中,$(document).bind('reveal.facebox',function(){})之外的var将是正确的设计。此链接可能有所帮助:

http://api.jquery.com/bind/

转到“传递事件数据”部分

答案 1 :(得分:0)

好吧,您没有提供声明源和歌曲变量的位置。如果它们来自用户填写的输入,那么我相信你没有问题。如果您在clarify_loader中分配值,那么只需使用全局变量

var var1, var2;

function a(){
    var1 = "x"
    var2 = "y"
}

function b(){
    alert(var1) //x
    alert(var2) //y
}

然后当你分别调用函数a和b时,你的变量将具有值x和y。