jquery багги сортировать сериализовать - PullRequest
0 голосов
/ 11 февраля 2010

Я обнаружил довольно странное поведение jquery. У меня есть два списка здесь, где я перетаскиваю li-элементы из одного в другой, текущие сортировки сохраняются с помощью ajax-mysql. Сегодня днем ​​я заметил, что иногда, просто иногда позиция последнего отброшенного элемента не сохранялась должным образом, она сохранялась как «0», когда это должно быть, например, 4 или 5. Мне потребовалось несколько часов, чтобы выяснить, что такое поведение прямое отношение к предупреждению, которое срабатывает после падения предмета:

alert(data);       <---- data is the current sorting of the ids

Если я удаляю эту строку, появляется описанное выше странное поведение сценария. Может быть, кто-то испытывал что-то подобное раньше и может поделиться некоторыми советами?

привет, Мащек

edit: эта функция содержит предупреждение:

            $(function() {

             $("#sortable2").sortable({

                  items: \'li:not(.col_header)\',
            connectWith: \'#sortable2, #sortable1, #sortable1b, #sortable1c\',   
            helper: \'clone\',
            placeholder: \'empfaenger-highlight\',
         revert: \'invalid\',
         update: function() {

              var data = $(this).sortable("serialize") + \'&user='.$user.'\';

              alert(data);
              var order = $(this).sortable("serialize") + 
              \'&action=updateList&user='.$user.'\'; 
             $.post("index.php?eID=moveitems", order, 
             function(theResponse){

                   $("#response").html(theResponse);
                   $("#response").slideDown(\'slow\');
                   slideout(); 

                 }); 

               } 

          }).disableSelection();

Я попытался использовать обратный вызов, чтобы обеспечить полную загрузку переменной:

                    $(function() {

                     $("#sortable2").sortable({

                          items: \'li:not(.col_header)\',
                          connectWith: \'#sortable2, #sortable1, #sortable1b, #sortable1c\',            
                          helper: \'clone\',
                          placeholder: \'empfaenger-highlight\',
                          revert: \'invalid\',
                          update: function() {



                          var data = $(this).sortable("serialize");

                               function doSomething(data) {

                          };

                               //alert(data);
                               var order = data + \'&action=updateList&feuser='.$user.'\'; 

                               $.post("index.php?eID=moveitems", order,  function(theResponse){

                          }); 

                     }  

                }).disableSelection();

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

1 Ответ

0 голосов
/ 11 февраля 2010

Вы правы, вероятно, легче читать из выходного кода. Скрипт:

 <script type="text/javascript">
           $(document).ready(
           function () {
                function slideout(){

                setTimeout(function(){

                     $("#sortable3 .provider, #sortable3 .empfaenger, #response").fadeOut("slow", function () {

               });

           }, 2000);}


           $(function() {

                $("#sortable2").sortable({

                     items: 'li:not(.col_header)',
                    connectWith: '#sortable2, #sortable1, #sortable1b, #sortable1c',            
                    helper: 'clone',
                    placeholder: 'empfaenger-highlight',
                    revert: 'invalid',
                    update: function() {

      var data = $(this).sortable("serialize") + '&feuser=14';

      alert(data);
      var order = $(this).sortable("serialize") + 
      '&action=updateList&feuser=14'; 
      $.post("index.php?eID=moveitems", order, 
      function(theResponse){

                               $("#response").html(theResponse);
                               $("#response").slideDown('slow');
                               slideout();  

                          }); 

                     }  

                }).disableSelection();
...