2012-04-22 2 views
21

Я использую change (handler) для прослушивания событий изменений в текстовом поле, но я получаю событие, когда textarea теряет фокус, но я хочу получить событие, как только значение изменится.Изменение JQuery не срабатывает до размытия

$("#text_object").change(listener); 
function listener(dom){ 
alert("I'm not getting here before the textarea loses focus"); 
} 
+4

Похоже, вы хотите «keydown» или «keyup». –

+0

Я попробовал keyup: http://stackoverflow.com/questions/10269571/form-event-incompatabilities-between-browsers-how-to-address –

ответ

22

К сожалению, браузер распознает изменения только тогда, когда поле размывается, поэтому вы можете попробовать подключить прослушиватель клавиатуры. К сожалению, не самое элегантное решение.

Подробная информация на странице http://api.jquery.com/keyup/.

+8

При использовании keyup вы можете вставлять текст с помощью мыши без запуска события. – Oscar

6

вы можете это сделать. просто убедитесь, что вы даете TEXTAREA тег ID

$(document).ready(function(){ 
     $('.addtitle').keyup(function(event) { 
      if(event.keyCode==13) { 

} 
}); 
}); 

в моем случае здесь, Im обжиг функцию на клавишу ввода (например Facebooks функций).

EDIT: Кроме того, если у вас есть более одного текстовое поле на странице, вы должны сделать это:

$(document).ready(function(){ 
     $('textarea[name=mynamevalue]').keyup(function(event) { 
      if(event.keyCode==13) { 

} 
}); 
}); 
1

Вот что я делаю:

/* Get the current value of the input and save it 
* in a data attribute before any change is made to it */ 
$(document).on('keydown','input', function(){ 
    $(this).data('value',$(this).val()); 
}); 

/* Compare the values after the keyup event*/ 
$(document).on('keyup','input', function(){ 
    if($(this).data('value') != $(this).val()){ 
    console.log($(this).attr('name')); 
    } 
}); 

Так что «KeyDown» событие вызывается до того, как keypress фактически выполнит какую-либо модификацию элемента, на который он вызван, «keyup» после запуска. Так я хватаю значение до и сравнить новое значение после того, как, я делаю то, что должен, если есть изменение ..

Я надеюсь, что это помогает

5

в соответствии с правильным ответом здесь javascript change event on input element fires on only losing focus

вы должны сделать что-то вроде этого

$('#name').on('change textInput input', function() { 
 
     
 
});

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

$('#name').on('change input', function() { ...

+0

yup! это то, что мне нужно, отлично работает в хроме, но я не знаю, как это работает на других моделях. –

+0

Работает как шарм! Это должен быть принятый ответ! – luizrogeriocn

0

я создал это для вас, это не самый элегантный решение, но оно работает

JS:

<script> 
$(document).ready(function (d) { 

    /* set initial value to "" (empty string), and not null 
     we're going to use this to check if the value of the current text field has been changed */ 
    val = ''; 

    setInterval(function() { 
     if (val !== $('textarea[name="checktext"]').val()) { 

      // Value is not the same, fire action 
      alert('val is different'); 

      // Update the current value 
      val = $('textarea[name="checktext"]').val(); 
     } else { 
      // Val is the same as textarea value 
     } 

    }, 50); 

}); 
</script> 

HTML:

<textarea name="checktext"></textarea> 

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

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

Надеюсь, вы сочтете это полезным.

Однако HTML5 имеет решение

<script> 
$(document).ready(function (d) { 

    $('textarea[name="checktext"]').on('input', function() { 
     alert('changed'); 
    }); 
}); 
</script> 
0

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

var myInterval; 
$("#text_object").focus(function (event) { 
    myInterval = setInterval(function() {    
     listener(event); 
    }, 100); 
}); 

$("#text_object").blur(function (event) { 
    clearInterval(myInterval); 
}); 

function listener(event){ 
    clearInterval(myInterval); 

    alert("I'm not getting here before the textarea loses focus"); 
} 

Надеется, что это помогает.

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