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
continueundefined
。感谢这本书的解释和建议=]。但这不是我的问题的解决方案。我的问题是变量不在上下文$(“#月”)。查找(“a”)。在('click',函数(){}
-变量的值value
continueundefined
@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>