2010-01-15 61 views
6

propb。非常简单,但不适合我。 寻找传递一个点击函数的变量来显示div a或div b基于点击的链接。我的代码是这样JQuery .click传递变量

$('.view').click(function() { 
    var id = this.id.replace('view_', ""); 
if(id=1) { $('#show').show('slow'); } 
if(id=2) { $('#show2').show('slow'); } 
$('#categories').hide('slow'); 
    return false; 
    }); 
    }); 

但很明显的,如果陈述是错误的 - 我知道,我只是用它们作为一个例子。任何suggerstions? 感谢adavance

+1

看起来你发现@ naeem的回答很有帮助。如果是这样,不要忘记标记为已接受。我看到你在这里是新人,所以我想确保你知道如果可能,接受你询问的每个问题的答案是多么重要。欢迎来到Stack Overflow! – 2010-01-15 08:36:00

回答

4

试...

var id = parseInt(this.id.replace('view_', ""), 10); 
if(id === 1) { 
$('#show').show('slow'); 
} else if(id === 2) { 
$('#show2').show('slow'); 
} 

1 '=' 被用于分配
2 '==' 是与类型转换比较
3 '===' 是比较而不类型转换

+0

完美Naeem,谢谢,工程立即开箱即用。我只是在学习JQuery/java,所以对于我来说,一些lang对我来说有点奇怪作为一个PHP家伙 再次感谢 – russell 2010-01-15 08:32:06

6

您的1的值赋给id,而不是测试匹配:

if(id = 1) {} // WRONG: this means if id is successfully SET to 1 

这是它应该是什么样子:

$('.view').click(function() { 
    var id = this.id.replace('view_', ""); 

    if(id == 1)  { $('#show').show('slow'); } 
    else if(id == 2) { $('#show2').show('slow'); } 

    $('#categories').hide('slow'); 

    return false; 
}); 

如果你发现自己造成这个错误很多,你应该切换测试:

if(1 == id) {} // Works 
if(1 = id) {} // Throws JS error instead of failing silently 
+0

+1这篇文章终于揭示了为什么人们写(1 == id)而不是其他方式 – jrharshath 2010-01-15 08:29:22

+0

很好解释,为+1 – Sara44 2012-11-22 17:27:14

0

如果你的链接ID是view_1view_2,那么都应该在这里很好,除了事实,你正在使用=,而不是比较==

如果您show元素被称为show1show2,而不是showshow2,你当然可以这样做:

$('.view').click(function() { 
    $('#show' + this.id.replace('view_','')).show('slow'); 
    $('#categories').hide('slow'); 
    return false; 
}); 
0

道格指出,问题是在有条件分配

你应该也考虑重命名你的ID直接匹配你的视图ID,所以你可以做到没有测试用例,只能通过字符串连接:'

$('.view').click(function() { 
    var id = this.id.replace('view_', ""); 

    $('#show' + id).show('slow'); // doesn't have to use if statements 

    $('#categories').hide('slow'); 

    return false; 
});