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

时间:2015-05-21 14:29:08

标签: javascript jquery html angularjs html5

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

3 个答案:

答案 0 :(得分:4)

使用trigger

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

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

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

答案 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()