2015-05-21 5 views
2

Я изучаю исходный код веб-сайта и хотел бы знать, как запускать программно автозаполнение ajax в этом текстовом поле. Я попытался включить только соответствующий код.Запуск события javascript/jquery программно

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(); ничего не происходит. Есть ли способ программно инициировать эти события?

ответ

4

Использование trigger:

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

Выполнить все обработчики и поведения, прикрепленные к совпавших элементов для данного типа события.

Docs: http://api.jquery.com/trigger/

+0

Я попробовал курок, и он ничего не делает, либо – JakeRanderson86

0

KeyUp и KeyDown оригинальные обработчики событий элементов. Вы не можете вызвать их в некоторых браузерах сразу после того, как вы использовали $() на них. Вы можете использовать .trigger('eventtype')

или вы можете получить доступ к исходному элементу и вызвать оригинальные элементы обработчиков на нем нравится:

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

или убедиться, что его браузер независимым, но по-прежнему работает с оригинальным элементом:

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

Возможно, $(elem).keyup() действительно инициирует ваше мероприятие правильно, но затем он падает на какую-то логику где-то внутри keyExecutor.onAllKeysExcept, которая сравнивает нажатие ключ против поставленного черного списка, когда фактически не нажата клавиша, что означает, что event.which не определено.

Вы можете смоделировать конкретный ключ нажат, возможно, один можно было бы ожидать, чтобы не влиять на вход, используя следующее:

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

@stovrov Я думаю, что вы может быть на что-то. keyExecutor.onAllKeysExcept возвращает false для определенных кодов клавиш (13, 37, 38, 39, 40, 27, 9). Я попытался вызвать любую букву a-z, но она все еще не работает. Любая идея, как я могу назвать «v.checkCompletion (n)»; – JakeRanderson86

+0

Я понятия не имею, что v.checkCompletion (n) не видит полный код, которого я боюсь, но установка 'e.which = 65' в вышеуказанном коде должна иметь тот же эффект в вашем обработчике ключей как подлинный keyup событие из буквы «a». Конечно, у вас также есть код для обработки кода в вашем выписке выше, поэтому вам нужно подумать о том, какой вклад он вносит в логику. – stovroz

+0

@stovroz: Это отлично поработало для меня. – Sparky1

Смежные вопросы