2009-04-14 10 views
4

jQueryを使用してclickイベントをいくつかの要素にバインドしようとしています。 プロトタイプを使用して私はこれをBindAsEventListener()を使って行うことができることを知っています。あなたが名前の関数として "ハンドラ" を定義したい場合やBindAsEventListenerはjQueryで同等ですか?

$("#someElement").click(function(event) { 
    alert("Hi you clicked me!"); 
}); 

例:

var myObject = { 

init: function(txtOneId, txtTwoId, lblResultId, ancAddId) { 
    this.txtOneId = txtOneId; 
    this.txtTwoId = txtTwoId; 
    this.lblResultId = lblResultId; 
    this.ancAddId = ancAddId; 


    var addListener = this.addResult.bindAsEventListener(this); 

    Event.observe(this.txtOneId, 'keyup', addListener); 
    Event.observe(this.txtTwoId, 'keyup', addListener); 
}, 

addResult: function() { 

    var valueOne = $(this.txtOneId).value; 
    var valueTwo = $(this.txtTwoId).value; 

    if (isNaN(valueOne) || valueOne == "") 
     valueOne = 0; 
    else 
     valueOne = parseInt(valueOne); 

    if (isNaN(valueTwo) || valueTwo == "") 
     valueTwo = 0; 
    else 
     valueTwo = parseInt(valueTwo); 


    var result = valueOne + valueTwo; 

    $(this.lblResultId).innerHTML = result; 

    return false; 
}}; 

答えて

5

私はあなたがまだプロトタイプを使用している、と$()プロトタイプ法と$ Jになるように、jQueryのノーコンフリクトを追加していないことを前提とし()はjQueryメソッドです。あなただけのinitメソッドに変更を加える必要があり

クイック回答

。イベントを受信したとき、この参照が使用できるように

init: function(txtOneId, txtTwoId, lblResultId, ancAddId) { 
     this.txtOneId = txtOneId; 
     this.txtTwoId = txtTwoId; 
     this.lblResultId = lblResultId; 
     this.ancAddId = ancAddId; 

     var handler = function(event){ event.data.addResult(event) }; 

     $j(this.txtOneId).bind('keyup', this, handler); 
     $j(this.txtTwoId).bind('keyup', this, handler); 
    } 

説明

はプロトタイプを使用すると、bindAsEventListener機能を使用していました。あなたは(jquery apiから)次の構文を使用して、bindメソッドで、このイベントデータを渡すことができますjQueryのため

:匿名関数を使用して、

.bind(eventType [, eventData], handler(eventObject)); 

はあなたのコードに適用されるが、これはに解決:

我々はEVENTDATAこの参照を渡す、テキスト要素に「keyUpイベント」イベントを結合した後、ハンドラ関数に、我々はthis.addResultを実行するevent.dataと(この)EVENTDATAを参照この場合
$j(this.txtOneId).bind('keyup', this, function(event){ event.data.addResult(event) }); 

(イベント)メソッド。

+0

それは正しいです、まだプロトタイプを使用して..申し訳ありませんが指定されている必要があります...あなたはNasaの請負業者ですか?クール。 –

0

click(fn)

function someElementClicked(event) { 
    alert("Hi you clicked me!"); 
}; 

$("#someElement").click(someElementClicked); 
-2

は、完全に同等では$です().bind()関数:

$("#elem").bind('click', function() { 
    //do stuff here 
}); 
+0

ない、完全に同等。これは私がトラビスとaltCognitorの回答を好む – hcpl

2

Bind documentation.

あなたはこの例を使用したいと思うでしょう:あなたのサンプルでは、​​あなたのイベントハンドラでオブジェクトを使用します。このコードでは、オブジェクトをバインドしてイベントの一部として戻すことができます。クロージャを作成するよりももう少し便利です。可能なイベント値:ぼかし、フォーカス、負荷、サイズ変更、スクロール、アンロード、beforeunload、クリック、DBLCLICK、マウスダウン、のmouseup、のMouseMove、マウスオーバー、マウスアウト、MouseEnterイベント、バインドが必要なほぼすべてのイベントと連動し

function Something() { 
    this.myData = "fun"; 
    this.handleClick = function(event) { 
    alert(event.data.myData); 
    } 
} 

var something = new Something(); 
$('h2').bind("click", something, something.handleClick); 

mouseleave、変更を選択し、提出し、KeyDownイベント、キーの押下、keyUpイベント、エラー

3

jQueryを使用すると、プロトタイプ関数を利用せずに実行できます。あなたが質問からのコード例では必要とされ、ここでイベントオブジェクトを失ったため、プロキシが

http://api.jquery.com/jQuery.proxy/

関連する問題