2010-11-11 575 views
7

這看起來像一個簡單的問題,但我找不到一個簡單的答案。所以我將從一個簡單的例子開始。jquery - 將參數傳遞給函數

<a href="#" onclick="showmsg('bark')">dog</a> 
<a href="#" onclick="showmsg('meow')">cat</a> 

這裏是一個JavaScript函數...

function showmsg(msg) { 
    alert(msg); 
} 

在上面的例子中,可以在不破壞行爲(的JavaScript)來增加額外的內容(HTML的線)。 html的每一行都將自己的參數傳遞給javascript,以告訴它應該顯示什麼消息。

如果HTML改爲...

<a href="#" class="showmsg">dog</a> 
<a href="#" class="showmsg">cat</a> 

那麼我怎麼寫,知道被點擊其中的HTML行jQuery的功能?換句話說...

如何將參數傳遞給jquery函數?

+1

嘿奧迪,歡迎來到SO。我在手機上看到了你的問題,當我努力嘗試回答時,它已經有了很多好的答案。您的問題現在已被編輯,但最初並未包含預先設定的代碼。我想確保你知道你可以使用編輯器中的按鈕來發布代碼,看起來像是一個和零。這將規避您的會員資格的任何鏈接或新的限制。無論如何。很高興在這裏見到你,祝你好運! – kevtrout 2010-11-11 13:09:29

回答

1

如果我明白你的問題正確,你可以做這樣的:

<a href="#" class="showmsg" alt="bark">dog</a> 
<a href="#" class="showmsg" alt="meow">cat</a> 

$(".showmsg").click(function(){ 
    var msg = $(this).attr("alt"); 
    alert(msg); 
}); 
+0

如果消息需要空間ID可能不是一個好的選擇。我們可以選擇一個像Alt或其他的屬性。 – Kangkan 2010-11-11 12:43:38

+0

是的這只是一個例子 – Michel 2010-11-11 12:45:25

12

在這種情況下,我會使用一個data- attribute,像這樣:

<a href="#" class="showmsg" data-sound="bark">dog</a> 
<a href="#" class="showmsg" data-sound="meow">cat</a> 

而且你click處理程序可以獲取它像這樣:

$("a.showmsg").click(function() { 
    alert($(this).attr("data-sound")); 
}); 

或者在jQuery 1.4.3+中

$("a.showmsg").click(function() { 
    alert($(this).data("sound")); 
}); 

You can test it out here

澄清基於評論:這是完全有效的HTML5,HTML4中它不是有效,但驗證是你所擁有的唯一的問題,它會在每一個HTML4瀏覽器。如果它在HTML4中沒有丟失,它將不會被添加到HTML5中......我個人會無論它是否被驗證,都會使用它。

+0

但這是無效的HTML。 – darasd 2010-11-11 13:11:54

+1

@darasd - 不是,它不是。它是HTML5規範的一部分:http://dev.w3.org/html5/spec/Overview.html#embedding-custom-non-visible-data-with-the-data-attributes(並且不會導致任何問題在HTML4中,在任何瀏覽器上)。 – 2010-11-11 13:13:55

+0

夠公平的,但它是一個HTML 5解決方案,因爲它會產生一個無效的HTML 4文檔。 – darasd 2010-11-11 13:16:32

1

首先爲了讓你顯示代碼在你的文章中放置代碼,選擇它並按下ctrl + k放入代碼塊。

返回問題jQuery中使用:

$("a.showmsg").click(function() { 
    alert($(this).text()); 
}); 

您可以使用「這個」找出被點擊

+1

這會顯示「狗」而不是「樹皮」。 – 2010-11-11 12:43:59

+0

@ Nick我意識到這一點,但在他的問題中,更改後的HTML無法傳遞包含聲音的變量。所以我只是顯示文本,而不是演示 – Brady 2010-11-11 12:46:13

+1

在這種情況下,我仍然不知道如何使用它,因爲它需要文本匹配警報... – 2010-11-11 12:47:12

3

你可以做什麼來設置包含值自定義屬性這需要適應功能。類似於

<a href="#" class="showmsg" data-attr="bark">dog</a><br> 
<a href="#" class="showmsg" data-attr="meow">cat</a><br> 

$("a.showmsg").click(function(){ 
    var attr = $(this).attr("data-attr"); 
    return false; 
}); 
+0

您應該指定這是一個HTML 5解決方案。它會產生一個無效的html 4文件。 – darasd 2010-11-11 13:14:57

3

數據方法是一個很好的方法。不過,如果是我,我寧願不通過定義對象地圖中的聲音來發現任何HTML4驗證錯誤,然後將文本傳遞給該地圖。例如:

<a href="#" class="showmsg">dog</a> 
<a href="#" class="showmsg">cat</a> 
var sounds = { 
    dog: "woof", 
    cat: "meow", 
    horse: "neigh", 
    etc: "etc" 
}; 
$("a.showmsg").click(function() { 
    alert(sounds[$(this).text()] || ""); 
});

工作例如:http://jsfiddle.net/AndyE/Q9yWU/

0

隨着the on function(或the click function開始的jQuery 1.4.3),你可以在一個非常好的方式傳遞的事件數據:

<button id="clickable0">Clickable 0</button> 
<button id="clickable1">Clickable 1</button> 

<script type="text/javascript"> 
    for(var i = 0; i < 2; i++) 
    { 
    $("#clickable"+i).on('click', {item: i}, function(event){ 
         alert("clicked on item "+ event.data.item); 
        }); 
    } 
</script> 

主要優點是event.data.item中的值將與參數(此處爲「i」)相同案件)是在onClick創建時。這很方便,因爲在這種情況下,當for循環運行時,您不必擔心我更改的值。

1

,如果你真的想用這個HTML:

<a href="#" class="showmsg">dog</a> 
<a href="#" class="showmsg">cat</a> 

就這樣寫:

// for dog 
$('.showmsg:first-child').click(function() { 
    // some crazy code here .. 
    return false; // for prevent open href link 
}); 

// for cat 
$('.showmsg:last-child').click(function() { 
    // some crazy code here .. 
    return false; // for prevent open href link 
}); 

$(".showmsg:contains('dog')").click(function() { 
    // some crazy code here .. 
    return false; // for prevent open href link 
}); 

$(".showmsg:contains('cat')").click(function() { 
    // some crazy code here .. 
    return false; // for prevent open href link 
}); 

$("a:contains('dog')").click(function() { 
    // some crazy code here .. 
    return false; // for prevent open href link 
}); 

$("a:contains('cat')").click(function() { 
    // some crazy code here .. 
    return false; // for prevent open href link 
});