我正在研究网站的一些源代码,并想知道如何在此文本框中以编程方式触发ajax自动完成。我试图只包括相关的代码。
HTML:
<div class="input-text xxl-width completer">
<input type="text" placeholder="" id="textBoxText" name="textBoxText" class="predictiveText" autocomplete="off">
<div class="autocompleter-wrapper" style="display: none;">
</div>
</div>
的javascript:
var w = this.$scope,
u = i.keyCodes,
v = this,
t = {
$predictiveLookup: w,
$predictiveInput: w.find("input.predictiveText"),
},
t.$predictiveInput.keydown(i.keyExecutor.onAllKeysExcept(function() {
v.isKeyDown = true
}, [u.enter, u.keyUp, u.keyDown, u.escape]));
t.$predictiveInput.keyup(i.keyExecutor.onAllKeysExcept(function() {
v.checkCompletion(n);
v.isKeyDown = false
}, [u.enter, u.keyUp, u.keyDown, u.escape]));
当我致电$(elem).keyup();
或$(elem).keydown();
时,没有任何事情发生。有没有办法以编程方式触发这些事件?
答案 0 :(得分:4)
答案 1 :(得分:1)
可能$(elem).keyup()
确实正确地触发了你的事件但是它在keyExecutor.onAllKeysExcept
内的某个逻辑上犯了一些错误,这是在没有按下的键与提供的黑名单时的比较实际上是按下了键,意味着event.which
未定义。
您可以使用以下方法模拟正在按下的特定键,也许是您可能不会影响输入的键:
var e = $.Event('keyup');
e.which = 40; // (code for down arrow key say)
$(elem).trigger(e);
答案 2 :(得分:0)
keyup和keydown是元素的原始事件处理程序。
在对它们使用$()之后,您无法直接在某些浏览器中调用它们。
您可以使用.trigger('eventtype')
或者您可以访问原始元素并在其上调用原始元素处理程序,如:
$(elem)[0].keyup()
$(elem)[0].keydown()
或确保其浏览器独立但仍使用原始元素运行:
$(elem).toArray()[0].keyup()
$(elem).toArray()[0].keydown()