Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery中的BindAsEventListener等价物?_Jquery_Prototypejs - Fatal编程技术网

jQuery中的BindAsEventListener等价物?

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

我正在尝试使用jQuery将单击事件绑定到某个元素。 使用prototype,我知道我可以使用
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的承包商?很酷。不是完全等效的,因为您在这里丢失了问题示例代码中所需的事件对象。对于这一点,我更喜欢特拉维斯和阿尔科尼托的答案