jQueryでclickイベントにbindしたら、クリックしてないのに勝手に動き出した件
表題の件、検索しても出てこなかったので。
まずはコードを。
[ HTML ]
<p class='sample'>ここをクリック</p>
<p class='display'></p>
[ javaScript ]
$("p.sample").bind('click',hello('ja'));
function hello(lan){
if(lan=='ja'){
var greet = 'こんにちは';
}else if(lan=='en'){
var greet = 'Hello!'
}else if(lan=='cn'){
var greet = '你好';
}else{
var greet = '○△■×';
}
$("p.display").text(greet);
}
ここをクリックっていうテキストをクリックすると「こんにちは」って表示されるのを意図していたんだが、なんかもう既に表示されている。bindのコールバックに引数を付ける必要があったのだが、引数をつけてやるとclickされる前に発動してしまうらしい。
で、正解はこっち。
$("p.sample").bind('click','ja',hello);
function hello(lan){
if(lan.data=='ja'){
var greet = 'こんにちは';
}else if(lan.data=='en'){
var greet = 'Hello!'
}else if(lan.data=='cn'){
var greet = '你好';
}else{
var greet = '○△■×';
}
$("p.display").text(greet);
}
コールバックする関数名は第三引数に、その関数に渡す引数はbindの第二引数に渡す。u呼び出した関数内では、渡した引数はオブジェクトとして渡っているので注意。