Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: debounce jquery хочет чистого input
 
 автор: vadimka   (05.03.2013 в 18:53)   письмо автору
 
 

Здравствуйте!

$(function(){
    $('input#login').keyup($.debounce(350, checkLogin ) ); // This is the line you want! 
    // Trigger the callbacks once to show some initial (zero) values.
    //checkLogin();
});

код срабатывает если присутствует чистая input (внузу первая)
если ее убрать то функция не работает

<input type="text" >
<input id="login" type="text" maxlength="30" tabindex="1" autocomplete="off" value="" name="login">

вторая строчка генериться java springMVC

  Ответить  
 
 автор: Deed   (05.03.2013 в 22:56)   письмо автору
 
   для: vadimka   (05.03.2013 в 18:53)
 

Нужно раскомментировать объявленную ранее ф-ию checkLogin();
Причем checkLogin(); должна быть объявлена в теле $(function(){...});
И ф-цию нужно разместить после сгенерированного инпута.

  Ответить  
 
 автор: vadimka   (06.03.2013 в 13:41)   письмо автору
 
   для: Deed   (05.03.2013 в 22:56)
 

все сделал - не работает!

  Ответить  
 
 автор: vadimka   (06.03.2013 в 14:00)   письмо автору
 
   для: vadimka   (06.03.2013 в 13:41)
 

Дальше вообще чудеса: если забрать

autocomplete="off"

то с первого раза не срабатывает, но если сделать F5 то функция работает (IE, FF)

  Ответить  
 
 автор: vadimka   (06.03.2013 в 14:23)   письмо автору
 
   для: vadimka   (06.03.2013 в 14:00)
 


         $('input#login').attr("autocomplete", "off");
    $('input#login').keyup( $.debounce(350, checkLogin ) ); // This is the line you want! 

такой код вообще не работает

  Ответить  
 
 автор: confirm   (06.03.2013 в 14:54)   письмо автору
 
   для: vadimka   (06.03.2013 в 14:23)
 

При обращению к элементу по его ID указывать тег элемента нет необходимости, указывать его желательно при обращении к элементу по классу.
Сравните работу обработчика в двух случаях:

<script>
$(function(){
  //сначала запустите этот обработчик
  $('#login').keyup(alert(1)); 
  //а затем этот
  $('#login').keyup(function(){
     alert(1)
  });   
});    
</script>
<input id="login" type="text" maxlength="30" tabindex="1" autocomplete="off" value="" name="login" />

  Ответить  
 
 автор: vadimka   (06.03.2013 в 15:36)   письмо автору
 
   для: confirm   (06.03.2013 в 14:54)
 

чето я этот пример не могу запустить в чистом даже html

  Ответить  
 
 автор: confirm   (06.03.2013 в 15:42)   письмо автору
 
   для: vadimka   (06.03.2013 в 15:36)
 

Так наверное эти куски кода надо еще правильно и в нужном месте страницы разместить. Или вы не знаете как это делается?

  Ответить  
 
 автор: vadimka   (06.03.2013 в 15:48)   письмо автору
 
   для: confirm   (06.03.2013 в 15:42)
 

извините, я уже совсем заработался разместил в чистом html и не прикрутил jquery
:) надо сделать там уат

  Ответить  
 
 автор: Deed   (06.03.2013 в 17:54)   письмо автору
1.1 Кб
 
   для: vadimka   (06.03.2013 в 15:48)
 

А вы, вообще-то, библиотеку с debounce подключили?
Вот вам архив с готовым примером.

  Ответить  
 
 автор: vadimka   (06.03.2013 в 18:38)   письмо автору
 
   для: Deed   (06.03.2013 в 17:54)
 

Ваш пример работает как и в моем случае если присутствует лишний

<input>
<input id="login" type="text" maxlength="30" tabindex="1" autocomplete="off" value="" name="login">

если забрать autocomplete="off"
тогда работает без допольнительного <input> :

<input id="login" type="text" maxlength="30" tabindex="1" value="" name="login">

не с первой попытки, а после F5

  Ответить  
 
 автор: Deed   (06.03.2013 в 19:20)   письмо автору
 
   для: vadimka   (06.03.2013 в 18:38)
 

А если сразу после подключения debounce переписать:

<script type="text/javascript">
document.createElement('input');
$(function(){
    var checkLogin = function(){
        var vv = $('#login').val();
        $('#checks').text(vv);
    }
    $('#login').bind('keyup', $.debounce(checkLogin,1500));
}); 
</script>

То есть, как бы наперед создать в DOM input (без присвоения его переменной!).
Дело в том, что когда вы объявляете фанкшин, инпута еще в ДОМе нет, если я правильно понял условие.
Или, может, создать "левый" инпут где-то в самом начале <body> и скрыть его в диве?

(Ох, и получу я за такое от confirm'a!)

  Ответить  
 
 автор: confirm   (06.03.2013 в 19:47)   письмо автору
 
   для: Deed   (06.03.2013 в 19:20)
 

Да мне то. Я написал ему на выполнение, с целью дальше предложить "урезать" как вздумается первую запись. Хотя не для него такое, а просто объяснить тоже не получится.

Что же касается этого плагина, то в сети есть описания багов его. А что касается моего отношения ко всему выше, выкинуть его вообще, так как данную операцию реализовать очень просто, без всякого плагина. И вообще, по меньше подцеплять всяких плюшек, не всегда они золото, не являются всегда первой необходимостью, и как в этом случае, реализация "не грузить сервер" совсем не означает поступать именно так, решить ее можно и другими методами.

  Ответить  
 
 автор: vadimka   (06.03.2013 в 19:56)   письмо автору
 
   для: confirm   (06.03.2013 в 19:47)
 

это не моя идея использовать, а пришло свыше:)

  Ответить  
 
 автор: confirm   (06.03.2013 в 20:11)   письмо автору
 
   для: vadimka   (06.03.2013 в 19:56)
 

Я вам писал что выполнить, вы это сделали? И что дает первая запись? Открою секрет - alert() сработает даже так:
$('#login').click(alert(1));
и так:
$('#login').cl(alert(1));
и так:
cl(alert(1));

Не вдаваясь в подробности, скажу сразу, что это:

$('input#login').keyup($.debounce(350, checkLogin ) );

предполагает, что будет возвращаться контекст, иначе этот метод в никуда. Хотите ищите в сети описание бага, исправляйте, а хотите как хотите, но чье-то хотение еще не означает подключать нечто, которое можно решить просто. Все решение, это таймер с контролем флага, вот и весь плагин. При этом, смотря еще что подразумевать под checkLogin - если это проверка занятости имени, еще куда ни шло, а если контроль существующего, то уже излишек, и лучше по потере фокуса. Так что думайте и решайте.

  Ответить  
 
 автор: vadimka   (07.03.2013 в 14:37)   письмо автору
 
   для: confirm   (06.03.2013 в 20:11)
 

Понимаю,что это мегаКостыль и извращение, но для лучшего освоение джава-скрипт:)
Вот что "работает"

var anInput = document.createElement("input");
    anInput.setAttribute("type", "text"); 
    anInput.setAttribute("style", "visibility:hidden;");                      
    $('#divWhereIsHiddenInput').append(anInput);

  Ответить  
 
 автор: confirm   (07.03.2013 в 14:49)   письмо автору
 
   для: vadimka   (07.03.2013 в 14:37)
 

Ну да, а на очередную кривую подключаемую хрень еще чего либо прицепить, и таким макаром и продолжать.
Для лучшего освоения надо изучать, так как вы так и не поняли в чем проблема. И лучше - выбросите эту хрень, и добавьте свой таймер, это ровно то, чем и занимается ваш "чудо плагин".

  Ответить  
 
 автор: vadimka   (07.03.2013 в 16:25)   письмо автору
 
   для: confirm   (07.03.2013 в 14:49)
 

Плагин работает на чистом html - нормально, я не спорю...
На страницу, куда прикручиваю - множество js там конфликты:) насколько понимаю чистый keyup не срабатывает:)
Все работает если не function () или ready, а -
$(window).load(function () {
надо смотреть на конфликты...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования