2012-01-26 8 views
6

これは初心者ですが、JavaScript関数のパラメータとして「this」を渡すことはできません。私は試しても鈍いです...<a>タグからjavacript関数に参照 'this'を渡す方法

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Untitled Document</title> 
<script language="javascript" type="text/javascript"> 
    function ko(control.id){ 
    alert(control); 
} 
</script> 

<body> 
<div id"lala"> 
    <a id="la" href="javascript:ko(this)" >Votes & Concerns</a> 
</div> 

</body> 
</html> 

アラートは "undefined!"と伝えます。

+0

あなたは正確に何をしようとしていますか?あなたは警告する( "Votes&Concerns")?とにかく、「la」を文字列として渡し、次にgetElementByID( "la")を渡してタグをDOMオブジェクトとして取得します。 – btown

+0

私はDom階層を使用して、画面内の多数のDIVのIDを発見しようとしています。 – DKean

答えて

11
<a id="la" href="#" onclick="ko(this); return false;" >Votes & Concerns</a> 
+0

あなたの解決策は唯一のものです!名誉ですが、大抵ありがとうございます。しかし、 "返品虚偽"とは何か教えてください。約ですか? – DKean

+0

私は、javascript関数が呼び出しに戻りますが、呼び出しはどこに戻ることができると仮定???私は偽を返しました。それはまだ動作します!しかし、私は初心者です...おそらく私は何かを見逃しています... – DKean

+3

'false false;を返した場合、イベントのデフォルトアクションが先に進まないようにします。アンカータグとクリックイベントでは、デフォルトのアクションは指定された 'href'にナビゲートすることです - この場合oriは"# "に設定しているので、現在のページに残りますが、' false'を返さないとブラウザは通常、現在のページの先頭にスクロールします。 – nnnnnn

3

あなたはそれを間違った方法ラウンドを持っている:

function ko(control){ 
    alert(control.id); 
} 

controlあなたはko(this)に渡しているオブジェクト(DOM要素オブジェクト、正確には)です。次にidプロパティにcontrol.idでアクセスしたいとします。


NBまた、これを実行する方がはるかに優れています。 HTMLアトリビュートではなくJavascriptブロックでイベントハンドラを割り当てるのが最善です。例えば:

document.getElementById('la').onclick = function() { 
    alert(this.id); 
}; 
+0

私はこれをやっている理由は、実際には外側のDIVのIDを取得することです。 'la' idの値は知ることができませんが、検査によってです。だから、私は "getElementById"コマンドを使用していません。 – DKean

+0

@DennisKeanドキュメント内の最初の 'div'であれば、' document.getElementsByTagName( 'div')[0] .onclick = ... 'を使用することができます。 。 – lonesomeday

+0

JSがhtmlの構造やIDを知らなくても動作しないのであれば、実際には別のものではありません。 – nnnnnn

4

は、「HREF」の値からそれをしないでください実際のイベントハンドラ属性からそれを行う:event

<a id='la' href='#' onclick='ko(event, this)'> 

パスを使用すると、デフォルトの解釈を防ぐことができるように<a>のクリックがブラウザによって行われないようにします。

function ko(event, element) { 
    if ('preventDefault' in event) event.preventDefault(); 
    event.returnValue = false; // for IE 

    // here "element" will refer to the clicked-on element ... 
} 
+0

私は元々得ていたのと同じ結果を得ます。 "未定義!" – DKean

+0

申し訳ありません - 私は答えを広げます。これは本当にしかし動作するはずです。 – Pointy

+0

これを試して、別の結果が得られたら教えてください... – DKean

関連する問題