Как отключить клавишу Enter/Return после того, как из-за нее выполнена функция?

У меня есть эта функция, где #text_comment это идентификатор текстовой области:

$('#text_comment').live('keypress',function (e) {

    if(e.keyCode == 13) {
        textbox = $(this);
        text_value = $(textbox).val();

        if(text_value.length > 0) {
            $(this).prev().append('<div id="user_commenst">'+text_value+'</div>');
            $(textbox).val("");
        } 
    }                                               
});

Происходит то, что текст добавляется при нажатии клавиши ввода / возврата (keyCode 13), но он также перемещает текст на строку вниз, как предполагается, клавиша ввода / возврата.

Это происходит, даже если я установил значение текстового поля на "".

5 ответов

Решение

Ответьте здесь http://jsfiddle.net/Z9KMb/

Попробуйте это событие..stopImmediatePropagation()

$('#text_comment').live('keypress',function (e) {       
          if(e.keyCode == 13) {   
               e.stopImmediatePropagation()
       ///rest of your code
  }
});

Попробуйте остановить распространение вашего события (см. http://snipplr.com/view/19684/stop-event-propagations/) при входе в if(e.keyCode == 13) дело.

Я проверил это, это работает. Enter не создает новую строку.

$('#text_comment').live('keypress',function (e) {

    if(e.keyCode == 13) {
        textbox = $(this);
        text_value = $(textbox).val();

        if(text_value.length > 0) {
            $(this).prev().append('<div id="user_commenst">'+text_value+'</div>');
            $(textbox).val("");
        }
        return false;
    }                                               
});

Хотя мне интересно, если вы не хотите когда-либо иметь новую строку, почему вы используете текстовую область, почему бы вместо этого не использовать input type='text'?

Другие вопросы по тегам