JQuery UIでシリアル化すると、表示される順序ではなく値が返されるようです。私が知る限り、配列はランダムな順序になっていますので、必要な順番で並べ替えることはできません。jQueryシリアル化の順序がランダムに見える
ユースケースは、並べ替えに使用されるドラッグアンドドロップテーブルです。行をドラッグすると、期待どおりにテーブルが並べ替えられます。しかし、いったんドラッグすると、値のシリアライズはランダムなようです。したがって、何かをitem-2に移動すると、2になると予想されます。しかし、order 0、order 7、order 10になることがあります。テーブルを取得して並べ替えるにはどうすればよいですか?注文は期待されていますか?
ここに私のjavascriptです:
var fixHelperModified = function(e, tr) {
var $originals = tr.children();
var $helper = tr.clone();
$helper.children().each(function(index) {
$(this).width($originals.eq(index).width())
});
return $helper;
},
updateIndex = function(e, ui) {
$('td.index', ui.item.parent()).each(function (i) {
$(this).html(i + 1);
});
};
//noinspection JSUnresolvedFunction
$('#sortable').sortable({
helper: fixHelperModified,
axis: 'y',
opacity: 0.5,
cursor: 'move',
stop: updateIndex,
update: saveRows
}).disableSelection();
function saveRows(){
var tableRows = $(this).sortable('serialize');
// POST to server using $.post or $.ajax
//noinspection JSUnresolvedVariable
$.ajax({
cache: false,
url: "/plugins/site/themes/admin/ajaxUpdate.php",
type: "POST",
data: tableRows
});
}
とMySQL更新する私のPHP:
<?php
require_once($_SERVER["DOCUMENT_ROOT"] . "/cfg.php");
foreach ($_POST['rowsort'] as $id => $order){
$sql = "UPDATE `categories` SET `order` = :categoryorder WHERE `id` = :categoryid;";
$stmt = mySQL::getConnection()->prepare($sql);
$stmt->bindParam(':categoryorder', $order);
$stmt->bindParam(':categoryid', $id);
$stmt->execute();
$stmt->closeCursor();
}
私のHTMLはid="rowsort-<?php echo $i; ?>"
私はserialize()
は、idフィールドを使用していることを知っていたブートストラップのテーブルですデフォルトでは、なぜ私は一貫した戻り値を得ることができないのか理解できません。
は、あなたがリターン成功応答質問に関連していない –
前にシリアライズ持っていますが、あなただけのループを() 'と' bindParam() '一回ではなく、毎回準備'呼び出す必要があります。ステートメントを準備してバインドしたら、ループ内で 'execute()'を呼び出して、異なる値の変数で同じクエリを繰り返し実行することができます。 – Barmar
ありがとう、私は 'execute()'がパラメータを取ることができないことを認識しませんでした。私は間違いなくこれを調べます。 @ Henrique-yc、私はJavascriptですばらしくはありません。これがAjaxでの最初の試みです。あなたは$ .ajax 'success'の一部としてserialize関数を定義する必要があると言っていますか? – Sage