以编程方式触发javascript/jquery事件

Trigger javascript/jquery event programmatically

本文关键字:jquery 事件 javascript 编程 方式触      更新时间:2023-09-26

我正在研究一个网站的一些源代码,想知道如何以编程方式触发这个文本框上的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();时,什么都没有发生。是否有办法以编程方式触发这些事件?

使用trigger:

$(elem).trigger('click');

为给定的事件类型执行附加到匹配元素的所有处理程序和行为。

文档:http://api.jquery.com/trigger/

可能是$(elem).keyup()确实正确地触发了您的事件,但它随后在keyExecutor.onAllKeysExcept内部的某个地方发生了一些逻辑,这是比较按下的键与提供的黑名单,当实际上没有键被按下时,这意味着event.which是未定义的。

你可以模拟一个特定的键被按下,也许是一个你不希望影响输入,使用以下命令:

var e = $.Event('keyup');
e.which = 40; // (code for down arrow key say)
$(elem).trigger(e);

keyup和keydown是元素的原始事件处理程序。在某些浏览器中,在对它们使用$()后不能直接调用它们。你可以使用.trigger('eventtype')

或者您可以访问原始元素并调用原始元素处理程序,例如:

$(elem)[0].keyup()
$(elem)[0].keydown()

或确保其独立于浏览器,但仍与原始元素一起运行:

$(elem).toArray()[0].keyup()
$(elem).toArray()[0].keydown()