質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

708閲覧

jQuery uiのsortableの挙動について

kenkbou

総合スコア151

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2018/02/07 06:26

編集2018/02/07 06:31

お世話になっております。
jQUeryUIのsortableの機能について質問です。
jQuery は1.12.4
jQuery UI ハ1.12.1を利用しております。

以下のようなHtmlがあったとします

Html

1<form method="post" accept-charset="utf-8" action="action.php"> 2<input type="text" name="row[]" value="1" /> 3<input type="text" name="row[]" value="2" /> 4<input type="text" name="row[]" value="3" /> 5<input type="text" name="row[]" value="4" /> 6<input type="text" name="row[]" value="5" /> 7<button type="submit">保存する</button> 8</form>

通常であれば、POSTに入ってくる値は

Html

1["row"]=> array(5) {[0]=> string(1) "1" [1]=> string(1) "2" [2]=> string(1) "3" [3]=> string(1) "4" [4]=> string(1) "5"}

となると思います。

jQuery uiのsortable機能を利用してPOSTをした際に、
並べ替えをした状態でPOSTが出来ない事例が発生しております。
説明しづらいのですが、下の要素を上に持って行った際にPOSTに入ってくる値が変わりません。
例えば、value="4"のものを上から2番目に持って行ってもPOSTされた内容は同じです。
逆に2番目の要素を4番目に持って行くと、「1,3,4,2,5」とPOSTに入ってきます。

このような事例を経験された方などいらっしゃいましたら教えて頂けないででしょうか。

コンソール等にエラーは出ておりません。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

x_x

2018/02/07 06:28

POSTしているところのコードはどうなっているでしょうか?
kenkbou

2018/02/07 06:31

var_dump($_POST);exit(); で受け取っているのみになります。よろしくお願いいたします。
guest

回答2

0

同様の問題への対処として
結局原因はわからなかったんですが解決策としては
「適当でもいいのでキー値を入れる」でした

nameが全く同じだと要素の順番通りに値が
取得されない仕様なのかなんなのか
とりあえず詳細な原因は不明ですが
連番でなくても、乱数でもいいのでキー値を入れて
nameが全く同じにならないようにしておくと
要素の順番通りになったということがありました

投稿2018/02/07 07:32

KazuhiroHatano

総合スコア7804

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kenkbou

2018/02/09 14:45

ありがとうございます。 やはりJS側で乱数を作成して突っ込んでおくという方法で解決いたしました。
guest

0

ベストアンサー

そもそもname=row[]を利用しているということはそれらの項目はすべて
同列の順不同なデータということですので順番が変わって困ることはないはず。
順番を、というよりキーを確保したいのであれば
name=r[0]~r[4]
のようにキー付きの名前にすればよいだけではないでしょうか?

sample

繰り返しになりますが、順番が重要ならキー付きの名前にして、
受け取った側で適切なソートをかけることです。

javascript

1<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> 2<link rel="stylesheet" href="http://code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css" /> 3<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script> 4<script> 5$(function(){ 6 $("#sortable").sortable(); 7 }); 8</script>

HTML

1<form method="post" action="recv.php"> 2<ul id="sortable"> 3<li><input type="text" name="row[0]" value="1"></li> 4<li><input type="text" name="row[1]" value="2"></li> 5<li><input type="text" name="row[2]" value="3"></li> 6<li><input type="text" name="row[3]" value="4"></li> 7<li><input type="text" name="row[4]" value="5"></li> 8</ul> 9<button type="submit">保存する</button> 10</form>
  • recv.php

PHP

1$row=filter_input(INPUT_POST,"row",FILTER_DEFAULT,FILTER_REQUIRE_ARRAY); 2ksort($row); 3print_r($row);

投稿2018/02/07 06:38

編集2018/02/07 07:15
yambejp

総合スコア114779

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kenkbou

2018/02/07 06:42

jqueryuiのsortableでsortをしておりますので、順番は固定であって欲しいんです。 おっしゃる通り連番を振ったら良いのですが、row[]ではいけないのかなと思っております。
yambejp

2018/02/07 07:16

実際にinputの順番がいれかわっているわけですからrow[]を使う限り 渡された順番通りキーに採番されて格納されていきます sampleつけましたので参考にしてください
kenkbou

2018/02/07 07:44

ありがとうございます!順番づけをしておいて、POSTしてからsortするのですね、とても勉強になりました。
kenkbou

2018/02/07 07:49

すみません、1点追加機能での質問なのですが、要素をappendしたりremoveした際にはやはりJS側で番号を振り直さないといけないですよね?
yambejp

2018/02/07 07:54

> 要素をappendしたりremove それはsortableの質問でしょうか? javascriptで要素を追加する場合にnameは工夫が必要でしょうね たとえば適当なclassやdata-name的な要素を作っておいて そのlengthを数えてnameに当てはめていくのが妥当でしょう
kenkbou

2018/02/07 07:58

ありがとうございます。やはりJS側で操作をすることも必要なのですね。勉強になりましたmm
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問