Javascript 理解Jquery回调函数

Javascript 理解Jquery回调函数,javascript,jquery,twitter-bootstrap,Javascript,Jquery,Twitter Bootstrap,我对此堆栈代码有疑问: <div class="btn-group" role="group"> <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" onblur="select()">Month<span class="caret"></spa

我对此堆栈代码有疑问:

<div class="btn-group" role="group">
    <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" onblur="select()">Month<span class="caret"></span></button>
        <ul class="dropdown-menu" id="month">
            <li><a href="#01">January</a></li>
            <li><a href="#02">February/a></li>
            <li><a href="#03">March</a></li>
            <li><a href="#04">April</a></li>
            <li><a href="#05">May</a></li>
            <li><a href="#06">Juny</a></li>
            <li><a href="#07">July</a></li>
            <li><a href="#08">August</a></li>
            <li><a href="#09">September</a></li>
            <li><a href="#10">October</a></li>
            <li><a href="#11">November</a></li>
            <li><a href="#12">December</a></li>
        </ul>
</div>
<script>
    function select(){
        var value;

        $(document).on('click', 'li a', function () {
             value = $(this).attr('href');
             console.log(value); // Result is the value set. Ex: Value = Link
        });    

        console.log(value); // Result is undefined
     }
</script>

如何在Jquery函数之外使用变量,以及为什么Jquery函数具有这种行为?

这里的问题是,当单击“li a”时,将分配“value”值

现在,您的函数正在执行以下操作:

function select(){
 var value;
 console.log(value);
}
在代码的其余部分中,您只需添加一个单击侦听器,当用户执行单击事件时将调用该侦听器

我认为你必须写这样的东西:

function select(){


    $(document).on('click', 'li a', function () {
console.log(value); // Result is the value set. Ex: Value = Link
      changeValue($(this).attr('href'));

    });    


}

function changeValue(val){

//Create some code to change the value of a global attribute or the desired behavior

}

我不确定你想要完成什么,但是你的变量超出了范围

var value;

$(document).on('click', 'li a', function () {
    value = $(this).attr('href');
});    

function getValue(){
   return value;
}
单击链接后,您可以调用此函数来检索值:

getValue()
无法获取给定脚本的预期输出。Jquery或Javascript中也没有错误

在解释代码流之前,我想指出,事件处理程序注册是不正确的

说明:

每次onblur事件发生时(平均单击月份按钮并单击外部),将调用选择功能并执行以下3个操作

function select() {
    //(1)value variable decalred and it is "undefined"
    var value;

    //(2)event handler registration happens
    $(document).on('click', 'li a', function () {
        //this block will not executed during select function call
        value = $(this).attr('href');
        console.log(value); // Result is the value set. Ex: Value = Link
    });    

    //(3)prints value variable and it is undefined, regardless of how many times
    //   select function is called.
    console.log(value); // Result is undefined
}
通过查看上面的流,只有内部块具有“value”变量的值。如果调用select函数来检查它,因为select函数有值声明,它将用“undefined”再次声明,并且它再次注册事件处理程序,这是错误的,并打印新实例的“value”变量,即“undefined”

好的,让我们尝试将变量“value”保持在select函数之外

var value; // <-- declaring outside select function
function select() {

    $(document).on('click', 'li a', function () {
        value = $(this).attr('href');
        console.log(value); // Result is the value set. Ex: Value = Link
    });    
    console.log(value); // Result is undefined
}

var值;// 为什么不直接绑定
单击
a
,而不使用
onblur
事件


$(“#月”).find(“a”).on('click',function(){
value=$(this.attr('href');
console.log(value);//结果是设置的值。例如:value=Link
}); 

如何调用该函数?使用
onblur
按钮事件(Twitter引导)。如果调用
select()
,它只会在
li
中的任何标记
a
中绑定一个单击事件。您是否尝试过
函数选择(){console.log($(this).attr(“href”)}
,结果是
undefined
.Thansk@Jasper,但结果是一样的,当我调用
getValue()
并在控制台中显示时,输出是
undefined
。谢谢@Daniel,我尝试了你的建议,但脱离了上下文
$(“#月”)。查找(“a”)。打开('click',函数(){}
变量的值
value
continue
undefined
。感谢这本书的解释和建议=]。但这不是我的问题的解决方案。我的问题是变量不在上下文
$(“#月”)。查找(“a”)。在('click',函数(){}
-变量的值
value
continue
undefined
@LucasCosta我重新编写了整个答案。希望它能提供更多的澄清。非常感谢@rajuGT的解释,我了解JQuery和Javascript中事件的工作原理,我正在查阅更多的学习资料。
var value; // <-- declaring outside select function
function select() {

    $(document).on('click', 'li a', function () {
        value = $(this).attr('href');
        console.log(value); // Result is the value set. Ex: Value = Link
    });    
    console.log(value); // Result is undefined
}
<script>
    $("#month").find("a").on('click', function () {
        value = $(this).attr('href');
        console.log(value); // Result is the value set. Ex: Value = Link
    }); 
</script>