2012-06-29 3 views
0

Я использовал плагин автозаполнения для своего сайта. Это работало хорошо для меня. Но теперь, когда я использовал Ajax в то же время Так что, добавляя новый HTML-код с помощью AJax, мой скрипт не удался. я отправил на StackOverflow и получил ответ, как использовать .on из Jquery 1.7.2 Так что я попытался переплетены мой код .onСвязывание с .on Событие JQuery

Мой код

$(document).ready(function(){ 
    $(function(){ 
     $(document).on("click.autocomplete","#artist_id",function(e){ 
      $(this).autocomplete({ 
       source : '<?php echo HTTP_PATH . '/artists/getArtistList'; ?>', 
       multiple: true, 
       mustMatch: true, 
       matchContains: true, 
       scroll: true, 
       minChars: 0, 
       autoFill: true, 
       dataType: "json", 
       parse: function(data) { 
        return $.map(data, function(item) { 
         return { data: item, value: item.label, result: item.label}; 
        }); 
       }, 
       formatItem: function(item) { 
        return item.label; 
       }, 
       formatResult: function(item) { 
        return item.id; 
       }, 
       formatMatch: function(item) { 
        return item.label; 
       } 
      }); 
     }); 
    }); 
}); 

Код, который работает хорошо ...

$("#artist_id").focus().autocomplete('<?php //echo HTTP_PATH . '/artists/getArtistList'; ?>', { 
     multiple: true, 
     mustMatch: true, 
     matchContains: true, 
     scroll: true, 
     minChars: 0, 
     autoFill: true, 
     dataType: "json", 
     parse: function(data) { 
      return $.map(data, function(item) { 
       return { data: item, value: item.label, result: item.label}; 
      }); 
     }, 
     formatItem: function(item) { 
      return item.label; 
     }, 
     formatResult: function(item) { 
      return item.id; 
     }, 
     formatMatch: function(item) { 
      return item.label; 
     } 
    }); 

Проблема не является отправкой ответа или не дает мне ошибки со сценарием. Я попытался проверить это с помощью Firebug.

+0

Вы попробовали поставить console.log («что-то здесь») в своем скрипте, чтобы узнать, добираетесь ли вы туда? Я подозреваю, что это не обязательно. $ (document) .on ("click.autocomplete", "# artist_id", function (e) { try $ (document) .on ("click", "# artist_id", function (e) { – Fermis

+0

Can u, чтобы положить logconsole.Новый с ним –

+0

Прямо над этой строкой $ (this) .autocomplete ({put console.log («Я сделал это»); Затем в случае ошибки, если вы посмотрите на консоль, если увидите, что я сделал это то, что вы получаете в эту функцию. – Fermis

ответ

0

Ваша проблема эта линия:

$(document).on("click.autocomplete","#artist_id",function(e){ 

Вы ранее «связывания» в центре внимания, теперь вы связываете на «click.autocomplete». Измените его следующим образом:

$(document).on("focus","#artist_id",function(e){ 

согласно jQuery docs on .on(), второй параметр является событие, которое вы хотите связать с, а не селектор.

+0

Нет. Но Y его не показывает мне ошибку. –

+0

Это не показывает ошибку, потому что похоже, что она не является обязательной. – Fermis

+0

@ rickm за документы jQuery на '.on() '(с которым вы связались) второй параметр является необязательным селектором, первым параметром всегда является событие. –

0

Немногих вещи:

Это избыточное

$(document).ready(function(){ 
    $(function(){... 

использовать только один или другие.

$(document).ready(function(){... 

Во-вторых, click.autocomplete связывается с клике событий, которые имеют autocomplete пространство имен. То, что я думаю, что вы хотели сделать, - связать событие с любым текстовым вводом, который имеет класс autocomplete.

$(document).on("click",".autocomplete",function(e){ 
    // prevent the default action 
    e.preventDefault(); 
    // initialize autocomplete 
    $(this).autocomplete({ 
     ... 
    }) 
    // remove class to prevent reinitializing autocomplete: 
    .removeClass('autocomplete') 
    // trigger the focus event to start the autocomplete 
    .focus(); 
}); 

$(document).ready здесь не требуется, так как document уже готов.

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