我正在编写一个小脚本,以便在第一次点击“仅”时清除我的搜索表单。到目前为止,我有以下内容:
$(function() {
if(typeof firstClick == 'undefined')
{
$("#search").live("focus", function() {
$(this).val("");
var firstClick = true;
});
}
});
但是,即使用var firstClick = true定义变量也是如此;在函数中,脚本似乎每次都传递if语句。我确定我错过了一些愚蠢的东西,但我似乎无法弄明白。
我已经尝试将函数外部的var firstClick定义为false布尔值,然后检查它是否为false,但我仍然无法在函数中使变量成为现实。
答案 0 :(得分:5)
var firstClick = true;
您正在重新声明首先点击此处。删除var
,并在两个函数之外定义它。在赋值之前添加var
会告诉Javascript将变量限定为当前函数,在您的情况下,该函数是分配给焦点事件的匿名函数。由于您使用var
限制其范围,因此外部函数无法看到它。
答案 1 :(得分:1)
变量仅存在于定义它们的范围内(使用var
)和后代范围。您的typeof
电话是在祖先范围内。那里不存在firstClick
。您应该在外部作用域中将变量定义为false
,然后将其重新定义为true
。此外,条件应该是里面点击处理程序。
$(function() {
var firstClick = false;
$("#search").live("focus", function() {
if (!firstClick) {
$(this).val("");
firstClick = true; // change the value in the outside scope
}
});
});
答案 2 :(得分:1)
您的firstClick
var在回调函数的本地范围内定义,因此对父代码不可见。
var firstClick = false;
$(function() {
if(!firstClick)
{
$("#search").live("focus", function() {
$(this).val("");
firstClick = true;
});
}
});
答案 3 :(得分:1)
问题是范围之一。变量firstClick仅存在于焦点事件中。您需要将firstClick声明为命名空间中的全局,如下所示:
(function($) {
var firstClick = false;
$('#search').live('focus', function() {
if (typeof firstClick === 'undefined') {
$(this).val('');
firstClick = true;
}
});
}(jQuery));