2012-11-06 35 views
1

我的代碼:太多的點擊jQuery的

$(".click1").click(function() { 
    $('.input').attr('name', 'name1'); 
}); 
$(".click2").click(function() { 
    $('.input').attr('name', 'name2'); 
}); 
$(".click3").click(function() { 
    $('.input').attr('name', 'name3'); 
}); 
$(".click4").click(function() { 
    $('.input').attr('name', 'name4'); 
}); 
$(".click5").click(function() { 
    $('.input').attr('name', 'name5'); 
}); 

要不然怎麼寫?我如何將其更改爲簡短版本?

+1

你想用它做什麼?即你想達到什麼目的?你爲什麼要改變'input'字段的名字? – ManseUK

+0

用'.click1','.click2'等元素髮布HTML。 –

+0

您是否正在設計一款遊戲?點擊挑戰? – madhairsilence

回答

3

HTML:

<a class="clickable" href="..." rel="1">...</a> 
    <a class="clickable" href="..." rel="2">...</a> 
    .... 

JS:

$('.clickable').click(function(){ 
     var _id = $(this).attr('rel'); 
     $('.input').attr('name', 'name' + _id); 
}); 
+0

+1。不知道爲什麼它被拒絕,但這是迄今爲止最好的答案。它做它應該做的事,也可能是一般的最佳做法。投票回來補償。 – Neil

+0

我不確定這個HTML是否會起作用;) –

+0

是的,我說。在鏈接的類的名字之前。你在代碼中看到更多的錯誤嗎?我根本沒有測試過,只是從我的頭上寫出來:) – Igor

-2

javascript提供了一個eval()函數。這是未經測試,但它應該是這樣的:

for(var i = 1; i <= 5; i++){ 
    eval("$(\".click" + i + 
     "\").click(function() {$('.input').attr('name', 'name" + 
     i + "'); });"); 
} 
+0

我沒有downvote,但是,eval是邪惡的!我們可以解決這個問題,而不訴諸於gotos和evals,對吧? – Neil

+0

你做了我的一天!對此使用eval ...不推薦使用eval。使用你的方法,最好做這樣的事情:'for(var i = 1; i <= 5; i ++){(「。click」+ n) .click(function(){$('。input')。attr('name','name'+ n);}); \t})(n); '(希望我沒有關閉......) –

1

像這樣:

這應該可以幫助人:)

說明上:從你的類採取的最後一個字符和怪人它

代碼

$(".click1,.click2,.click3").click(function() { 

    var num = $(this).attr('class'); 
    //get the number at the end of the class of this particular div   
    var lastChar = num.substr(num.length - 1) 

    $('.input').attr('name', 'name'+lastChar); 
}); 

​ 
+0

這不是通用的解決方案 – Igor

+0

@icrew Hiya man':)'你是什麼意思,順便說我不是DV':)* *這個解決方案*使用* OPs代碼中的**模式,並將數字從他們,即最後一個字符 - 這不會改變任何OP的DOM代碼。 –

+0

不用擔心downvote。它不是通用的,因爲如果你想要一個鏈接,你還必須更改代碼。我的代碼適用於任何數量的:) – Igor

0

爲什麼不能這樣!

有一個共同的類所有組件說「點擊」,並使用一個簡單的,如果條件

$('.clickable').click(function(){ 

    if this object has 'click1' class { // do something } 
    if this object has 'click2' class { // do something } 
    if this object has 'click3' class { // do something } 

}); 
+0

這稍微好一點,但我認爲click1和click2之間的行爲不同於足以重複使用代碼的行爲,但如果它確實存在,則無論如何都應該重寫。 – Neil

1
$(".click1, .click2, .click3, .click4, .click5").click(function() { 
    $('.input').attr('name', 'name' + this.className.slice(-1)); 
}); 

還是有趣的方式(不推薦)如果你有一個無限的數量(無論何種原因,不想add another class):

[1, 2, 3, 4, 5].forEach(function(e) { 
    var f = '$(".click' + e + '").click(function() {'; 
    f += '$(".input").attr("name", "name' + e + '");'; 
    f += '});'; 
    new Function(f).call(); 
});