1

jQueryのソート可能なプラグインを使用してドラッグしてソートするハンドルを持つフィールドのテーブルがあります。このプラグインは、送信ボタンがクリックされると、AJAXを介してPHPスクリプトを起動し、変更を保存します。ただし、実際には1回おきにしか機能しません。たまに2回連続で成功することがありますが、それは非常にまれです。

これが私のHTMLで、動的に生成されます。

<div class="foldertable">
  <table class="data" id="sortable">
    <tr class="odd" id="field_21">
      <td class="handle"><a href="/admin/database/customfields/edit?cfid=21">Occupant Name</a></td>
    </tr>
    <tr class="even" id="field_22">
      <td class="handle"><a href="/admin/database/customfields/edit?cfid=22">DBA</a></td>
    </tr>
    <tr class="odd" id="field_23">
      <td class="handle"><a href="/admin/database/customfields/edit?cfid=23">Tenant Contact</a></td>
    </tr>
  </table>
  <a href="" id="button" class="textbutton">Update Order</a>
</div>

そして私のjQuery:

    <script type="text/javascript">
    var fixHelper = function(e, ui) {
        ui.children().each(function() {
            $(this).width($(this).width());
        });
        return ui;
    };
    $(document).ready(function(){
        $("#sortable tbody").sortable({ 
            helper: fixHelper,
            opacity: 0.6, 
            update: function(){
                $('#savemessage').html('<p>Click <em>update order</em> to save</p>');
                $('#button').show();
                }
        });
        $('#button').click(function(event){
            var order = $("#sortable tbody").sortable("serialize");
            order += "&crudtype=order";
            $('#savemessage').html('<p>Saving changes...</p>');
            $.post("/admin/database/customfields/crud",order,function(theResponse){
                    $('#savemessage').html(theResponse);
                });
        });
    });
    </script>

そして、結果のPHPページ/ admin / database / customfields / crud

$fields = $_POST['field'];
$counter = 1;
foreach ($fields as $field) {
  $params = array(array('value' => $counter, 'type' => 'i'), array('value' => $field, 'type' => 'i'));
  db_query('UPDATE customfields SET sortorder = ? WHERE cfid = ?', $params, false);
  $counter++;
}
print '<p>Changes saved</p>';
exit(); // Exit necessary for AJAX call
break; // End reorder

私はこれをこのサイトhttp://www.simonbattersby.com/blog/drag-and-drop-with-jquery-ui/に基づいていますが、毎回ではありません。誰かが私が間違っていることを教えてもらえますか?前もって感謝します!

4

1 に答える 1

1

私はあなたのコードを取り、あなたのモジュールを再作成しました、そしてそれは毎回うまくいきます。これに基づいて、おそらくPHPページがキャッシュから提供されていると私が結論付けることができる唯一のことは?'結果のPHPページ'のヘッダーを確認できますか?最も簡単なのは、FirefoxのFirebugやChromeの開発者ツールなどを使用してネットワークトラフィックを監視し、ajax呼び出しとPHP応答を確認することです。

編集:あなたの問題は、UPDATEORDERテキストがAHREFリンクであることに気づきました。そのため、ユーザーがページをリロードするようにブラウザに指示するクリックすると、AJAX呼び出しを起動する前にリロードすることがあります。A HREFをDIVまたはSPANに変更するだけで、機能します。

だから代わりに

<a href="" id="button" class="textbutton">Update Order</a>

持ってる

<div id="button" class="textbutton">Update Order</div>

また

<span id="button" class="textbutton">Update Order</span>
于 2013-02-19T21:56:33.143 に答える