2014-01-27 3 views
0

Мой текущий код, как это и на основе клик, не печатая на основе:jQuery: Как я могу увеличить поле ввода во время ввода?

$(document).ready(function() 
{ 

$('#btn_send').on('click', function() { 

content_input_username = $('#input_username').val(); 

$.post('system/check_username.php', 
     { 
      'content_input_username':content_input_username 
     }, 
     function(responseText) 
     { 
      if(responseText == 'false') 
      { 
       $('#username_info').html('username available'); 
      } 

      if(responseText != 'false' && responseText != 'sql_error') 
      { 
       $('#username_info').html('user name not available'); 
      } 



     } 
    ); 

}); // /button-click 

}); 

Как я могу добиться того, что в поле ввода является постоянно подтверждено во время ввода текста? Что мне нужно изменить?

+0

Не могли бы вы добавить чек после события keyup? – Craighead

+0

С точки зрения юзабилити, редко бывает необходимо или желательно ограничивать, какие символы набирают, когда один печатает их. Пользователи могут интерпретировать это как сломанную клавиатуру. Кроме того, можно было бы вырезать и вставлять текст в поле, и вам все равно нужно проверить его на 'change'. – Blazemonger

+0

Событие ввода больше подходит для этой ситуации. –

ответ

0

Это по существу решение Bart (go upvote!). Я хотел, чтобы у OP был полный пример кода и направить внимание от события keyup, которое, как мы думали, было неправильным способом.

function debounce(fn, delay) { 
    var timer = null; 
    return function() { 
    var context = this, args = arguments; 
    clearTimeout(timer); 
    timer = setTimeout(function() { 
     fn.apply(context, args); 
    }, delay); 
    }; 
} 

$(document).ready(function() { 
    $('#input_username').on('change input', debounce(function() { 
     content_input_username = $('#input_username').val(); 

     $.post('system/check_username.php', 
      { 
       'content_input_username':content_input_username 
      }, 
      function(responseText) 
      { 
       if(responseText == 'false') 
       { 
        $('#username_info').html('username available'); 
       } 

       if(responseText != 'false' && responseText != 'sql_error') 
       { 
        $('#username_info').html('user name not available'); 
       } 



      } 
     ); 

    }, 250)); 
}); 

Here - мой источник использования «ввода изменений».

+0

Событие 'change' не срабатывает, пока вы не нажмете или не уйдете от текстового поля. – Blazemonger

+0

@NobleUplift Событие изменения не будет срабатывать, пока оно не сфокусируется на этом поле. –

+0

Хорошая добыча! Я отредактирую это в своем ответе ant по отношению к кому-то еще. – NobleUplift

0

Вы можете использовать обработчик события KeyUp

$('#input_username').on("keyup", function(){ 
    //do your validation here. 
    content_input_username = $('#input_username').val(); 

    $.post('system/check_username.php', 
    { 
     'content_input_username':content_input_username 
    }, 
    function(responseText) 
    { 
     if(responseText == 'false') 
     { 
      $('#username_info').html('username available'); 
     } 

     if(responseText != 'false' && responseText != 'sql_error') 
     { 
      $('#username_info').html('user name not available'); 
     } 

    }); 
}); 
+0

, если «bar» является ложным, а «bart» - true. Я могу попасть в состояние гонки, когда я набираю «bart» и получаю «имя пользователя недоступно». Следует использовать дроссель. –

+0

@Bart Думаю, в этом случае событие keyup поможет. потому что он срабатывает при каждом нажатии клавиши. если вы наберете «bar», а также, когда «bart», он покажет подтверждение с текущим значением. –

+1

, потому что вы делаете запрос (сообщение) для каждого нажатия клавиши, вы не можете предположить, что ответ «барт» появится после «бара» один http://en.wikipedia.org/wiki/Race_condition. Также не является хорошей практикой и пустой тратой ресурсов, чтобы сделать запрос на каждое нажатие клавиши. –

0
<input type="text" onkeypress="validate()"> 

$(document).ready(function() 
{ 

function validate() { 

content_input_username = $('#input_username').val(); 

$.post('system/check_username.php', 
     { 
      'content_input_username':content_input_username 
     }, 
     function(responseText) 
     { 
      if(responseText == 'false') 
      { 
       $('#username_info').html('username available'); 
      } 

      if(responseText != 'false' && responseText != 'sql_error') 
      { 
       $('#username_info').html('user name not available'); 
      } 



     } 
    ); 

} 

}); 
+0

, используя ваш код, консоль сообщает мне с каждым щелчком, что «проверка не определена» – MaxNagler

+0

Да, с какого имени вы вызываете? – NobleUplift

+0

'validate()' срабатывает при нажатии клавиши ^^^ – War10ck

2

2 вещи здесь.

Сначала вы должны изменить событие click для ввода или изменения (подробнее об этом позже).

Поскольку вы выполняете запрос ajax, это не идеально подходит для каждого нажатия клавиши, поэтому «изменение» является хорошей альтернативой, но оно срабатывает только тогда, когда вы теряете фокус на входе, что может сделать его довольно раздражающим.

«вход» на помощь. Событие ввода будет срабатывать для каждого нажатия клавиши, но вы должны принять некоторые соображения, поскольку, если я наберу «bart», он просто убьет 4 запроса с условием гонки, и это абсолютно плохо. Вы должны проверить валидацию так, вы делаете запрос, если пользователь перестает печатать, так что скажем, 3 секунды.

Также отметим, что «вход» не доступен на старых браузерах, но вы можете добавить изменения также для старых браузеров, как: .on('change input')

notes on: keyup это событие будет срабатывать даже использовать курсор для перемещения вправо влево или заменяя буква с той же буквой, в то время как вход будет срабатывать только при изменении ввода. Поэтому я буду держаться подальше от события keyup.

+0

thanx для вашего ответа. к сожалению, я не могу по-настоящему следовать. не могли бы вы записать весь правильный код? что было бы здорово – MaxNagler

+0

Это то, что я имел в виду в своем первоначальном ответе Макс. Я отредактировал его, чтобы сделать его более понятным. – NobleUplift

+0

Проверьте это подробное сообщение в блоге Реми Шарпа. http://remysharp.com/2010/07/21/throttling-function-calls/ –

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