Подтвердить что ты не робот

Изменение JQuery не срабатывает до размытия

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

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

Ответ 1

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

Подробности http://api.jquery.com/keyup/.

Ответ 2

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

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

}
});
});

в моем случае здесь, запустив функцию на клавише ввода (например, функции facebook).

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

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

}
});
});

Ответ 4

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

/* 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

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

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>

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

Я просто показываю вам идею, чтобы использовать setInterval из x миллисекунд, чтобы проверить, совпадает ли значение ввода текста со значением val или любым другим именем переменной хотите использовать. если они не совпадают, значит, он был изменен, если они совпадают, значит, ничего не изменилось.

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

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

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

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

Ответ 6

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

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");
}

Надеюсь, что это поможет.