Вызовите функцию JavaScript, нажав Enter в текстовом поле без глобальных событий jQuery. - PullRequest
3 голосов
/ 05 апреля 2011

Я работаю над проектом с целью обучения, и пока я избегаю jQuery, чтобы выучить как можно больше JavaScript.Я успешно использовал onkeypress, чтобы определить, был ли введен ввод или нет в текстовом поле или текстовой области, но после добавления панели поиска на моем веб-сайте я обнаружил, что такие события, как onkeypress, являются глобальными (т. Е. При нажатии ввода в строке поиска активируется моя команда send).message 'textarea).

Я также использую AJAX, и поэтому я не хочу простой отправки формы.Я также надеюсь использовать текстовую область, так как мне нужно несколько строк (чтобы было видно больше текста).

При этих ограничениях разумно ли обойтись без использования jQuery?Если так, как я могу это сделать?Другие ответы на сайте просто указывают на jQuery.

Спасибо,

Paragon

Редактировать: меня попросили код, так что здесь соответствующие HTML и JavaScript.Вот один из входных данных:

<input type="text" id="search" name="search" onkeypress="return activate(event, this.value);"/>

Вот javascript, который можно использовать вместе с ним:

function activate(e, message)
{   
    if (isNotEnter(e))
    {   
        return true;
    }   
    else // ie. enter was pressed
    {   
        // only proceed to search() if message is not empty
        if (message.length >= 1)
        {   
            search();
        }   
        return false;
    }   
}

И функция isNotEnter ():

function isNotEnter(e)
{   
    if (e.keyCode == 13) 
    {   
        return false;
    }   
    else
    {   
        return true;
    }   
}

Ответы [ 2 ]

3 голосов
/ 05 апреля 2011

Звучит так, будто вы захватываете ключевое событие на document, а не конкретно на своем элементе ввода.

Так что найдите что-то вроде document.onkeypress = function() { ... } и замените на document.getElementById('your-input').onkeypress = function() { ... }.

Если выВы не можете найти этот код, возможно, вы используете addEventListener, поэтому найдите document.addEventListener('keypress', function() { ... }, false);

Обновление

Вы хотите избежать встроенных обработчиков событий. Google addEventListener() (и вы также поймете, почему нам нужно attachEvent() для

Кроме того, вы, как правило, не хотите называть функции отрицательными, например вашипример isNotEnter().Вам следует перевернуть его функцию и вызвать ее isEnter(), чтобы вы могли использовать оператор отрицания, если не введено , например, ! isEnter().

3 голосов
/ 05 апреля 2011

Вам следует использовать jquery, потому что он потрясающий, простой в изучении, избавляется от проблем с браузером и т. Д.

Если вы полностью против, то это можно сделать с помощью чистого JS.Было бы полезно, если бы вы показывали свой код, но вы, вероятно, привязываете событие onkeypress к документу, когда вы должны привязывать его к входным данным.

$("#search").keypress(function()
{
//do function here, use this to refer to the element
});
...