Javascript 余烬jQuery“;“一”;多次调用事件处理程序

Javascript 余烬jQuery“;“一”;多次调用事件处理程序,javascript,jquery,ember.js,Javascript,Jquery,Ember.js,在我的Ember应用程序中,我有一些jQuery代码要执行(基于粘贴到输入框) 我的问题是,我在代码中使用了“一”,但它被执行了不止一次。根据jQuery文档,它应该只被调用一次 didRender: function() { var self = this; var $inputs = Ember.$("input[id*=my-field]"); $inputs.on("paste", function() { var $this = Ember.$

在我的Ember应用程序中,我有一些jQuery代码要执行(基于粘贴到输入框)

我的问题是,我在代码中使用了“一”,但它被执行了不止一次。根据jQuery文档,它应该只被调用一次

didRender: function() {
    var self = this;
    var $inputs = Ember.$("input[id*=my-field]");

    $inputs.on("paste", function() {
        var $this = Ember.$(this);
        var originalValue = $this.val();
        $this.val("");

        $this.one("input", function() {
            // Why is this getting invoked more than once ?
            // Contains code which splits & sets value to multiple textboxes like 
//$inputBox.val('SPLITTED_PASTED_VALUE');
        });
    });
}

您看到此问题的原因是,每次ember重新渲染组件/视图时,它都会重新执行didRender挂钩

由于要将jquery事件附加到的输入元素在呈现中持久化,因此事件会不断添加
.one()
确实只执行了一次,正如预期的那样,但实际上您已经将
.on('paste')
应用了多次,这意味着每次粘贴时,
.one()
都会再添加一次

我的最终建议-停止使用jquery。将jquery和余烬混合在一起会导致难以追踪的奇怪事情发生

如果不可能,则更改“粘贴时”事件的调用方式。 加载组件/控制器时,文本框很可能只呈现一次。 如果是这种情况,请使用将jquery侦听器应用于元素

didInsertElement: function() {
    var self = this;
    var $inputs = Ember.$("input[id*=my-field]");

    $inputs.on("paste", function() {
        var $this = Ember.$(this);
        var originalValue = $this.val();
        $this.val("");

        $this.one("input", function() {
            //Manipulations here
        });
    });
}

也可以考虑是否需要<代码>一个(“输入”)< /代码>事件。它似乎在粘贴后立即执行,因此您可以删除它,并在清空值后处理您的操作。

它被调用的次数是您调用的次数。
。一个
-因为它在另一个事件处理程序中,每次粘贴时都会得到一个新事件。事实上,如果您看到问题,纯jQuery就不是这样。只有当我尝试使用Ember
时,问题才会出现。一个
运行一次-如果您调用
。一个(…)
然后
。在第一个运行之前,一个(…)
再次运行,然后您会得到两次。请参阅(console.log-on-button-click),这里可能不是问题/原因,但主体是“纯jQuery”。不确定为什么需要
。一个
——继续代码?或者使用
setTimeout
。因此,如果粘贴的值不是某个长度,我希望恢复到旧值(在texbox中)