我有一个现有的事件重页,我正在尝试添加预先输入支持。typeahead 功能按需要工作,只是它似乎只能附加到输入项一次。
问题在于,为简单起见,在某些操作之后,现有页面会删除所有附加到特定输入的事件 $('input').off()
,然后根据新上下文重新附加新的事件处理程序。
这会导致一个问题,即重新附加的 typeahead 函数似乎永远不会触发。(这里讨论了一个类似但不同的问题:Trouble updated Bootstrap's typeahead data-source with post response但这在这里不相关,因为我可以很好地更新源 - 我无论如何都无法触发 type-ahead我尝试什么)
编辑:为了澄清 - 更改源(如链接的问题)不是问题 - 实际页面上的源是向服务器发出请求的 js 函数。问题是调用.off()
似乎会永久中断预先输入,并且我无法删除调用.off()
而不必重写大部分页面......下面的代码和 jsfiddle 只是我可以设计的最短的代码来演示这个问题
这里有一个有效的 jsfiddle 记录问题:http: //jsfiddle.net/hz5P3/8/
为了将来参考,完整的代码如下。简要记录一下:input.works
text_field 只有一个 typeahead 声明并且工作正常。input.no_works
调用了 typeahead 函数,然后调用$('.no_works').off()
以删除此输入上的所有事件。重新附加到此功能的 typeahead 根本无法正常工作。
有什么方法可以使第二次提前输入的调用按预期工作?
谢谢
html
<div class="container">
<div class="hero-unit">
<h1>Bootstrap jsFiddle Skeleton</h1>
<p>this is a test typeahead that will work</p>
<input type="text" class="works" style="margin: 0 auto;">
<p>this is a test typeahead that is updated and will not work</p>
<input type="text" class="no_works" style="margin: 0 auto;">
</div>
</diV>
Javascript
$('.no_works').typeahead({
source: ["cat", "dog", "mouse"]
});
$('.no_works').off();
$('.no_works').typeahead({
source: ["cat", "dog", "mouse"]
});
$('.works').typeahead({
source: ["cat", "dog", "mouse"]
});
</p>