Javascript 余烬jQuery“;“一”;多次调用事件处理程序
在我的Ember应用程序中,我有一些jQuery代码要执行(基于粘贴到输入框) 我的问题是,我在代码中使用了“一”,但它被执行了不止一次。根据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.$
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中)