jQuery中的BindAsEventListener等价物?
我正在尝试使用jQuery将单击事件绑定到某个元素。 使用prototype,我知道我可以使用jQuery中的BindAsEventListener等价物?,jquery,prototypejs,Jquery,Prototypejs,我正在尝试使用jQuery将单击事件绑定到某个元素。 使用prototype,我知道我可以使用BindAsEventListener()实现这一点 例如: var myObject = { init: function(txtOneId, txtTwoId, lblResultId, ancAddId) { this.txtOneId = txtOneId; this.txtTwoId = txtTwoId; this.lblResultId = lblResultId
BindAsEventListener()
实现这一点
例如:
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;
}};
:
或者,如果要将“处理程序”定义为命名函数:
function someElementClicked(event) {
alert("Hi you clicked me!");
};
$("#someElement").click(someElementClicked);
$("#elem").bind('click', function() {
//do stuff here
});
完全等效的是$().bind()函数:
function someElementClicked(event) {
alert("Hi you clicked me!");
};
$("#someElement").click(someElementClicked);
$("#elem").bind('click', function() {
//do stuff here
});
您需要使用这个示例:在示例中,您在事件处理程序中使用了一个对象。此代码将允许您绑定对象并将其作为事件的一部分取回。这比创建闭包要方便一点
function Something() {
this.myData = "fun";
this.handleClick = function(event) {
alert(event.data.myData);
}
}
var something = new Something();
$('h2').bind("click", something, something.handleClick);
Bind可以处理几乎所有您需要的事件:可能的事件值:模糊、聚焦、加载、调整大小、滚动、卸载、卸载前、单击、dblclick、mousedown、mouseup、mousemove、mouseover、mouseout、mouseenter、mouseleave、change、select、submit、keydown、keypress、keypup、error我假设您仍在使用prototype,并添加了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);
}
解释
对于Prototype,您使用了bindAsEventListener函数,以便在收到事件时可以使用此引用
对于jQuery,您可以使用以下语法(从)通过bind方法传递此事件数据:
应用于您的代码,使用匿名函数,解析为:
$j(this.txtOneId).bind('keyup', this, function(event){ event.data.addResult(event) });
在本例中,我们将“keyup”事件绑定到文本元素,将this引用作为eventData传递,然后在处理函数中使用event.data引用eventData(this)以执行this.addResult(event)方法。要在不利用原型函数的情况下执行此操作,可以使用jQuery.proxy
这是正确的,仍然使用原型。。对不起,我应该指定。。。你也是Nasa的承包商?很酷。不是完全等效的,因为您在这里丢失了问题示例代码中所需的事件对象。对于这一点,我更喜欢特拉维斯和阿尔科尼托的答案