这应该是一个简单的if
声明,但它对我不起作用。基本上,当您单击一个元素时,我希望突出显示该元素,并将ID放入变量value
中。但是,如果在同一个元素中点击两次,我想value = NULL
。
(function($){
$(".list").click(function() {
$(this).toggleClass("hilite");
var temp = $(this).attr('id');
if (value != temp) {
var value = $(this).attr('id');
} else {
value = NULL;
}
});
})(jQuery);
答案 0 :(得分:4)
您的主要问题是,您通过使用var
关键字重新定义值变量来“提升”它。使用更少的代码也可以更有效地编写此代码。这应该有效:
(function($) {
// somewhere outside click handler
var value = '';
// click handler
$(".list").click(function() {
var id = $(this).toggleClass('hilite').attr('id');
value = (value === id) ? null : id;
/* or if you prefer an actual if/else...
if (value === id) {
value = null;
else {
value = id;
}
*/
});
})(jQuery);
<小时/> 编辑:有关可能有用的原始代码段的一些常规注释:
NULL
应为null
var $this = $(this);
)<更高效和可维护/ LI>
!==
而不是!=
来避免无意识的类型强制。value
,但始终记住变量在JavaScript中是函数范围的,因此您的var value
语句正在提升value
标识符对于整个函数,这意味着您的分配对单击处理程序之外的任何内容都没有影响。答案 1 :(得分:3)
您需要在函数范围之外声明var值,以便在函数调用之间保持其值。实际上,值变量在设置后就会丢失,因为它超出了范围。
var value = null;
(function($){
$(".list").click(function() {
$(this).toggleClass("hilite");
var temp = $(this).attr('id');
if (value != temp) {
value = temp;
} else {
value = null;
}
});
})(jQuery);
答案 2 :(得分:2)
你可以这样做:
(function($){
var tmp = {};
$(".list").click(function() {
$(this).toggleClass("hilite");
var id = $(this).attr('id');
if (!tmp[id]) {
var value = id;
tmp[id] = true;
} else {
value = NULL;
tmp[id] = false;
}
});
})(jQuery);
通过这种方式,您可以使用tmp对象来存储所有不同id的
的状态答案 3 :(得分:1)
它可能不会跳过那个陈述,你可能会对隐含的全球“价值”和本地“价值”产生混淆。
(function($){
$(".list").click(function() {
$(this).toggleClass("hilite");
var temp = $(this).attr('id');
if (value != temp) { // <-----------------Implied global var called "value"
var value = $(this).attr('id'); // <---Local variable valled "value"
} else {
value = NULL; // <---------------------Which one am I
}
});
})(jQuery);
此外,它应该是value = null
,因为NULL只是一个未定义的变量。
这应该是两点的一个有效例子:
var value = null;
(function($){
$(".list").click(function() {
$(this).toggleClass("hilite");
var temp = $(this).attr('id');
if (value != temp) {
value = $(this).attr('id');
} else {
value = null;
}
});
})(jQuery);
答案 4 :(得分:0)
在条件语句中使用它之前,是否需要声明value
?
答案 5 :(得分:0)
您没有在此功能中设置值。
var value = "NULL";
(function($){
$(".list").click(function() {
$(this).toggleClass("hilite");
var temp = $(this).attr('id');
if (value != temp) {
value = $(this).attr('id');
} else {
value = "NULL";
}
});
})(jQuery);
答案 6 :(得分:0)
未定义变量value
。它要么是一个全局变量,要么你可以使用jQuery的$('.selector).data()
方法将它附加到元素:
http://api.jquery.com/data/
我还建议使用!==
进行比较,因为它会比较变量的类型和内容。