2009-04-14 40 views
4

我正在嘗試將點擊事件綁定到使用jQuery的某個元素。 使用原型我知道我可以使用BindAsEventListener()來做到這一點。BindAsEventListener在jQuery中等價嗎?

例子:

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

我假設你還在使用的原型,並增加了jQuery沒有衝突,使$()是一個原型法和附加$ J ()是一個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你可以使用下面的語法(從jquery api)的綁定方法傳遞此事件數據:

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

應用到你的代碼,使用的匿名函數,這解析爲:

$j(this.txtOneId).bind('keyup', this, function(event){ event.data.addResult(event) }); 

在我們結合「KEYUP」事件的文本元素這種情況下,通過此引用作爲EVENTDATA然後在處理函數我們引用EVENTDATA(本)與event.data執行this.addResult (事件)方法。

+0

這是正確的,仍然使用原型..抱歉應該指定......您是Nasa承包商嗎?涼。 – 2009-04-14 19:35:53

0

click(fn)

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

,或者如果你想要定義的 「處理」 爲命名的功能:

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

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

完全等效的是$ ().bind()函數:

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

不完全等效。爲此,我更喜歡Travis和altCognitor的答案 – hcpl 2013-01-03 09:28:56

2

Bind documentation.

你會想用這個例子:在您的樣品,你在你的事件處理程序使用的對象。此代碼將允許您綁定對象並將其作爲事件的一部分返回。這比創建關閉更方便。

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

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

綁定工作你需要幾乎每一個事件:可能的事件值:模糊,焦點,負載,調整大小,滾動,卸載,beforeunload,單擊,DBLCLICK,鼠標按下,鼠標鬆開,鼠標移動,鼠標懸停,鼠標移開,了mouseenter,鼠標離開,改變,選擇,提交的keydown,按鍵,KEYUP,錯誤

3

要做到這一點沒有利用原型功能,你可以使用jQuery。因爲你失去了在這裏的事件對象所需要從問題的示例代碼代理

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