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

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

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

jQuery UI はjQuery公式のインターフェースライブラリであり、対話型のウェブアプリケーションを作る際に役立ちます。

Q&A

解決済

5回答

3833閲覧

jQuery UI appendGridの内容の保持について

退会済みユーザー

退会済みユーザー

総合スコア0

jQuery UI

jQuery UI はjQuery公式のインターフェースライブラリであり、対話型のウェブアプリケーションを作る際に役立ちます。

0グッド

0クリップ

投稿2015/02/01 13:57

http://appendgrid.apphb.com/で紹介されているappendGridをコンタクトフォームに埋め込んでいます。

appendGridのデモ。
http://appendgrid.apphb.com/Demo

入力した内容をメールで送信すると云う寸法ですが、メールの送信自体は問題無いのですが
入力した内容をCookieで保持したいのですが方法が分かりません。
名前や住所等を必須項目にしておりますが、必須項目を空白のまま送信しようとした場合、
送信せずにページはそのままで注意を表示するようになっていますが、現状はappendGridに入力した文字が消えてしまいます。
これを短時間でも良いので保持できればと思っております。
よろしくお願いします。

実際のコードは以下です。

lang

1 $('#order').appendGrid({ 2 caption: '', 3 initRows: 1, 4 columns: [ 5 { name: '品番', display: '品番', type: 'text', ctrlAttr: { maxlength: 100 }, ctrlCss: { width: '100px'} }, 6 { name: '品名', display: '品名', type: 'text', ctrlAttr: { maxlength: 100 }, ctrlCss: { width: '250px'} }, 7 { name: '色', display: '色', type: 'text', ctrlAttr: { maxlength: 20 }, ctrlCss: { width: '100px'} }, 8 { name: 'サイズ', display: 'サイズ', type: 'text', ctrlAttr: { maxlength: 4 }, ctrlCss: { width: '40px'} }, 9 { name: '数量', display: '数量', type: 'text', ctrlAttr: { maxlength: 4 }, ctrlCss: { width: '40px'} }, 10 ], 11 12 hideButtons: { 13 moveUp: true, 14 moveDown:true, 15 removeLast: true 16 } 17 18 }); 19 20});

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

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

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

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

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

guest

回答5

0

ベストアンサー

クッキー対応版
F5だけ不具合があります。カラムの上下移動にも対応しています。
コピペして一切修正せずに、ローカルで動作確認完了したら、本番に反映してください。

lang

1<html> 2<head> 3<meta http-equiv="content-type" content="text/html;charset=utf-8" /> 4<!--jQuery UI Core, Widget and Button components are mandatory--> 5 6<!-- 7 jQuery-UI download: 8 http://jqueryui.com/download/ 9 jQUery-Cookie download: 10 https://github.com/carhartl/jquery-cookie/releases 11 jQuery 1.11.2 download 12 http://jquery.com/download/ 13 Download the compressed, production jQuery 1.11.2 14 15 Google Chrome で動作しない件について 16 http://goweb.jp/blog/2011/05/27/1497/ 17 chrome はローカル環境では、クッキーを生成しないとか。 18 19 動作確認ブラウザ: 20 windows IE9 21 windows Firefox 20.0.1(ちょっと古いですね) 22 mac osx Safari 23 動作確認ができていないブラウザ 24 mac osx Chrome 25 windows 版はインストールしてないので知らず 26 27 28 29 30--> 31<link href="jquery-ui-1.11.2.custom/jquery-ui.css" rel="stylesheet"/> 32<link href="jquery.appendGrid-1.5.1/jquery.appendGrid-1.5.1.css" rel="stylesheet"/> 33<script type="text/javascript" src="jquery-1.11.2.min.js"></script> 34 35<script type="text/javascript" src="jquery.cookie.js"></script> 36 37<script type="text/javascript" src="jquery-ui-1.11.2.custom/jquery-ui.js"></script> 38<script type="text/javascript" src="jquery.appendGrid-1.5.1/jquery.appendGrid-1.5.1.js"></script> 39 40 41<script type="text/javascript"> 42$.cookie.raw = true; 43$(function () { 44 45 var tblSelector = "#order"; 46 47 var initData = restoreCookies2JsonData(); 48 49 // ここからappendGrid 初期化 50 $(tblSelector).appendGrid({ 51 caption:'', 52 initRows:1, 53 columns:[ 54 {name:'品番',display:'品番',type:'text',ctrlAttr:{maxlength:100},ctrlCss:{width:'100px'}}, 55 {name:'品名',display:'品名',type:'text',ctrlAttr:{maxlength:100},ctrlCss:{width:'250px'}}, 56 {name:'色',display:'色',type:'text',ctrlAttr:{maxlength:20},ctrlCss:{width:'100px'}}, 57 {name:'サイズ',display:'サイズ',type:'text',ctrlAttr:{maxlength:4},ctrlCss:{width:'40px'}}, 58 {name:'数量',display:'数量',type:'text',ctrlAttr:{maxlength:4},ctrlCss:{width:'40px'}} 59 ], 60 hideButtons:{ 61 moveUp:true, 62 moveDown:true, 63 removeLast:true 64 } 65 }); 66 67/* 68 $(tblSelector).appendGrid({ 69 caption: 'My CD Collections', 70 initRows: 1, 71 columns: [ 72 { name: 'Album', display: 'Album', type: 'text', ctrlAttr: { maxlength: 100 }, ctrlCss: { width: '160px'} }, 73 { name: 'Artist', display: 'Artist', type: 'text', ctrlAttr: { maxlength: 100 }, ctrlCss: { width: '100px'} }, 74 { name: 'Year', display: 'Year', type: 'text', ctrlAttr: { maxlength: 4 }, ctrlCss: { width: '40px'} }, 75 { name: 'Origin', display: 'Origin', type: 'select', ctrlOptions: { 0: '{Choose}', 1: 'Hong Kong', 2: 'Taiwan', 3: 'Japan', 4: 'Korea', 5: 'US', 6: 'Others'} }, 76 { name: 'Poster', display: 'With Poster?', type: 'checkbox' }, 77 { name: 'Price', display: 'Price', type: 'text', ctrlAttr: { maxlength: 10 }, ctrlCss: { width: '50px', 'text-align': 'right' }, value: 0 }, 78 { name: 'RecordId', type: 'hidden', value: 0 } 79 ] 80 }); 81*/ 82 // クッキー保存値があればそれを復帰する 83 if (initData.length > 0) { 84 //alert("initData.length = " + initData.length); 85 86 $(tblSelector).appendGrid("load", initData); 87 } 88 89 $(tblSelector).on("click blur", "input,select",function() { 90 91 window.saveCookie(); 92 }); 93 94 window.saveCookie = function() { 95 // シリアライズデータをクッキーに保存 96 $.cookie( 97 "GRID2", 98 $(document.forms[0]).serialize(), 99 1); // 有効期限(1日) 100 } 101 102 // 初期化ここまで 103 // クッキーをデコードし、appendGrid("load",data); 104 // を実行する。 105 function restoreCookies2JsonData() { 106 var cookies = $.cookie("GRID2"); 107 108 // このプレフィックスとsuffixの "_x" を除去したものがカラムのラベル名になる 109 var colNamePrefix = $(tblSelector).attr("id") + "_"; 110 var rowOrderName = colNamePrefix + "rowOrder"; 111 112 // appendGrid "load" 用 JSON データを作成する 113 var initData = []; 114 115 //alert(cookies); 116 117 if (cookies) { 118 var map = []; 119 // クッキー登録パラメータを展開する。 120 // 変数名_x "_x" が行番号なので、これを取得して各行のマップリストを作成する 121 $(cookies.split("&")).each(function() { 122 var keyVal = this.split("="); 123 var key = decodeURI(keyVal[0]); 124 var val = decodeURI(keyVal[1]); 125 var rowIndex = key.substring(key.lastIndexOf("_") + 1); 126 127 if (!map[rowIndex]) { 128 map[rowIndex] = {}; 129 } 130 map[rowIndex][key] = val; 131 }); 132 133 // 並べ替え順序を退避し、配列に変換する 134 var rowOrders = null; 135 if (map["rowOrder"][rowOrderName]) { 136 rowOrders = eval("[" + 137 map["rowOrder"][rowOrderName].replace(/\%2C/g, ",") + "]");; 138 } else { 139 rowOrders = []; 140 } 141 delete map["rowOrder"]; 142 143 // 仮配列に各行のマップを詰める 144 var tmpArr = []; 145 for (var x in map) { 146 var colMap = []; 147 var entryCount = 0; 148 for (var z in map[x]) { 149 if (z.indexOf(colNamePrefix) == 0) { 150 var colName = z.substring(colNamePrefix.length); 151 colName = colName.substring(0, colName.lastIndexOf("_")); 152 colMap[colName] = map[x][z] || ""; 153 entryCount += 1; 154 } 155 } 156 if (entryCount > 0) { 157 tmpArr.push(colMap); 158 // alert(map2(colMap)); 159 } 160 } 161 // rowOrder を適用する 162 // alert(rowOrders); 163 for (var i=0;i < rowOrders.length;i++) { 164 // 行の順序は、1から始まる。3、1、2のとき、 165 // tmpArr は、1、2、3と入っているので、これを 166 // 正しい順序に直す。 167 168 initData.push(tmpArr[rowOrders[i] - 1]); 169 } 170 } 171 return initData; 172 } 173 174 function map2(m) { 175 var arr = []; 176 for (var a in m) { 177 arr.push(a + "=>" + m[a]); 178 179 } 180 return arr.join(", "); 181 } 182}); 183</script> 184</head> 185<body> 186<form> 187 Mail:<input type="text" name="mailAddress" /><br /> 188 Name:<input type="text" name="userName" /><br /> 189 <div id="gridOuter"> 190 <table id="order"></table> 191 </div> 192 <button onclick="saveCookie();">送信</button> 193</form> 194<hr /> 195<p>このサンプルが動作するための必要構成</p> 196<pre> 197 appendGridDemo/ 198 jquery-1.11.2.min.js 199 jquery.cookie.js 200 jquery.appendGrid-1.5.1/ 201 jquery.appendGrid-1.5.1.css 202 jquery.appendGrid-1.5.1.js 203 jquery-ui-1.11.2.custom/ 204 jquery-ui.css 205 jquery-ui.js 206 jquery-ui.min.css 207 demo.html (このHTMLのファイル) 208 209※Mac OSX Safari で動作確認済み 210 211※動作内容 212 一覧のクリック、フォーカスIN でクッキーに入力内容を保存する。 213 送信ボタン(submit)でクッキーに入力内容を保存する。 214 ページリロード(F5)では保存されません。注意!! 215 再表示(初期表示含む)時、クッキーを読み込み、クッキーに前回の値が 216 保存されているときだけ appendGrid の初期データを生成して appendGrid を初期化する 217 クッキー保存日数は1日です。 218 とりあえず、これをコピペして、そのまま動作させてみてください。 219 問題なければ、本番に適用となります。 220 手順1:JavaScript を開始・終了タグまるごとコピーし、本番に貼り付けます。 221 手順2:appendGrid のテーブルタグをフォームの中に入れてください。 222 手順3:appendGrid の id が order ならばこのままでOKです。違う場合は、メソッド戦闘に tblSelector 変数 223 があるのでそれを書き換えてください。 224 手順4:送信ボタン用のメソッドがあるので、送信ボタンに設定してください。 225 jQuery で設定する場合は、 226 $("ボタンID").click(function() { window.saveCookie() }); 227 228 229 追記: appendGrid のテーブル名が"order" で、 他に "order_xxxx" とかフォーム要素が 230 あるとまずいことになります。 231 232 以上です。 233 234</pre> 235 236</body> 237</html> 238 239 240

投稿2015/02/03 08:07

ipadcaron

総合スコア1693

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

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

退会済みユーザー

退会済みユーザー

2015/02/03 13:43

すみません、こちらへ投稿するべきでしたが一つ古い方に投稿してしまいました。
ipadcaron

2015/02/03 14:02

いえいえ、ひとつ古い方に回答しました。 jquery.cookie.js へのパスが間違っているか、jquery.cookie.js をサーバーへアップロード済みか確認してみてください。
ipadcaron

2015/02/03 14:06

jquery-UI はとりあえず最新で、jquery のバージョンは、appendGrid の仕様をみると 1.10 以上らしいです。上記サンプルも、1.11 を読み込んでいます。 ワードプレスデフォルトの jquery バージョンには気をつけてください。
退会済みユーザー

退会済みユーザー

2015/02/03 14:10

ipadcaron様 ありがとうございます。 既に確認済でソースを覗いてソースからjquery.cookie.jsが開けますのでパスが間違っていたり読込めていない事はないはずです。 .value:null},st.error=function(e){throw Error("Syntax error, unrecognized expres... このようなエラーらしき表示があるのですが・・・
ipadcaron

2015/02/03 14:19

ローカルでは動作するけど、組み込んでみると動かないというのはよくあります。 ひとつずつ解決していくしかありません、としか言えません。 何を手がかりに?と思うかもしれません。はしょった英語のエラーメッセージで一体何がわかるというのか、と思うかもしれませんが、とりあえず最小状態の画面を構成してそこにスクリプトを地道に付け足していくとか、alrt() いっぱい入れてみるとか、console.log だと止まらないので(;;スクリプトデバッガは使ったことがないのでちょっとアドバイスできません。
退会済みユーザー

退会済みユーザー

2015/02/03 14:34

ipadcaron様 ありがとうございます。 う~ん・・・ 脳ミソが流れ出てきそうです・・・
ipadcaron

2015/02/03 14:55

脳みそ流してください。 現状のHTMLをブラウザ2個新規に起動して表示します。 片方入力してSUBMIT 片方はなにもせずにF5押す 結果がわかったらこのままでは使えないというのが理解できると思います。 $.cookie() のドキュメントに確か3番目の引数にドメインかパスを指定することで できたような記憶があります。で、ここが問題です。 参照されたユーザが特定できる場合はその特定可能なキーワードをキーにして クッキーの有効範囲を狭めることでマルチブラウザの対処が可能になります。 で、問題なのか、画面表示したユーザなりお客様なりがユニークになるのか? という問題ですね。セッションIDとかがあればそれでユニークにすることは 可能ですが、、、、どうでしょう。 クッキーじゃなくて、最初に提示したのは、JSON 形式で埋め込み型のやつ でしたが、そのときはクッキーはまずいだろ、くらいにしか考えていません でした。 もう少しクッキーの危険性を考えてから投稿すればよかったと反省しています。 では。
退会済みユーザー

退会済みユーザー

2015/02/03 15:16

ipadcaron様 ありがとうございます。 簡単にすると、アクセス者にIDを割り振ってcookieを一意の物にしない危険?と言う意味なのでしょうか? この方法は諦めざるを得ないのでしょうか・・・ よろしくお願いします。
ipadcaron

2015/02/04 06:23

localstrage を検索してください。 画面をユニークにする仕掛けは、  ちょうどPHPのHPがありました。 http://blog.katty.in/5124 ここに書いてあるUUID 生成が可能ならば、 テキストボックスにこのIDを入れることで 画面毎にユニークにすることができます。たぶん。 冒頭のローカルストレージは、クッキーの保存限界を突破させるための仕組みです。 クッキーと違う点は解説ページがいっぱいあるので参考にしてください。 ブラウザ2個起動で確認しましたよね? クッキーがドメイン単位なので異なるブラウザ間でデータ共有してしまうのです。 なので、今のソースだと、"GRID2" というクッキーのキーを利用していますが、 これを、"GRID2_UUID:xxxxxxyyyyyywwwwwqqq" とかすれば一意の衝突する 可能性が極めて低いキーにできるのではないか?ということです。 で、ローカルストレージがどこに絡むのかというと、画面で「+」ボタンを1000回 押され、1000行入力されたときに、クッキーの容量が破綻します。 1000行はたとえですね、実際は50行くらいでしょうか。1行 100 文字として。 ローカルストレージはブラウザ2個でも衝突しないかもしれません。 やったことないので不明ですけど。衝突しないならお手軽です。ただし クッキーと違って永久保存らしいので、時間管理を自前で行う必要は あります。 諦めてPHPカスタムで行くのも良し、とりあえずやれるとこまでやって納得いってから 諦めるなりそのままやるなり、、、といったとこだと思います。 別にパスワードじゃ住所など個人的な情報を保存するわけではないので クッキーもありだと思いますが、一般的には、こういう画面遷移の情報 保持にはクッキーは使いません。
ipadcaron

2015/02/04 06:47

失礼。UUID の生成はJavaScript 側で行う必要がありますね。 で、テキスト BOXは何に使うのかというと、生成したキーの保存 に使います。 appendGrid のように、画面上でフォーム部品を動的に生成する タイプの部品はワードプレスが管理してくれない>だからSUBMITすると内容が消えてしまう。 ということで、ワードプレスが管理するテキストBOXを用意する>SUBMITしても内容が消えない(ブラウザ閉じるまでキーが有効になる=>クッキーにアクセすするためのキーの不変が保証できる) ということになります。
退会済みユーザー

退会済みユーザー

2015/02/05 15:13

ipadcaron様 ありがとうございます。 お返事が遅くなりすみません。 自分なりに色々試してみたのですが、自分には敷居が高すぎて無理ですので今回は諦めます。貴重なお時間を割いて考えて頂き非常に感謝しております。 また何かございました際にはよろしくお願い致します。
guest

0

>>PS. appendGridで追加した複数行に入力した全ての内容がメールで送信出来ております。
これ聞いて安心しました。複数行がメールフォームに記載できないのでは?と思っていました。

なので、自分の仕事は、当初の目的どおり、クッキーを使った例を示します。

クッキーは1日を設定しました。

別途、保存した情報から自動的に行数を算出して JSON パラメータを作成したものをアップしますね。

lang

1<html> 2<head> 3<!--jQuery UI Core, Widget and Button components are mandatory--> 4 5<!-- 6 jQuery-UI download: 7 http://jqueryui.com/download/ 8 jQUery-Cookie download: 9 ? 10 jQuery 1.11.2 download 11 jQuery HP 12 13 14--> 15<link href="jquery-ui-1.11.2.custom/jquery-ui.css" rel="stylesheet"/> 16<link href="jquery.appendGrid-1.5.1/jquery.appendGrid-1.5.1.css" rel="stylesheet"/> 17<script type="text/javascript" src="jquery-1.11.2.min.js"></script> 18 19<script type="text/javascript" src="jquery.cookie.js"></script> 20 21<script type="text/javascript" src="jquery-ui-1.11.2.custom/jquery-ui.js"></script> 22<script type="text/javascript" src="jquery.appendGrid-1.5.1/jquery.appendGrid-1.5.1.js"></script> 23 24 25<script type="text/javascript"> 26$.cookie.raw = true; 27 28 29$(function () { 30 31 var saveRows = $.cookie("ROWS") || 1; 32 33 //alert(saveRows); 34 35 $('#tblAppendGrid').appendGrid({ 36 caption: 'My CD Collections', 37 initRows: saveRows, 38 columns: [ 39 { name: 'Album', display: 'Album', type: 'text', ctrlAttr: { maxlength: 100 }, ctrlCss: { width: '160px'} }, 40 { name: 'Artist', display: 'Artist', type: 'text', ctrlAttr: { maxlength: 100 }, ctrlCss: { width: '100px'} }, 41 { name: 'Year', display: 'Year', type: 'text', ctrlAttr: { maxlength: 4 }, ctrlCss: { width: '40px'} }, 42 { name: 'Origin', display: 'Origin', type: 'select', ctrlOptions: { 0: '{Choose}', 1: 'Hong Kong', 2: 'Taiwan', 3: 'Japan', 4: 'Korea', 5: 'US', 6: 'Others'} }, 43 { name: 'Poster', display: 'With Poster?', type: 'checkbox' }, 44 { name: 'Price', display: 'Price', type: 'text', ctrlAttr: { maxlength: 10 }, ctrlCss: { width: '50px', 'text-align': 'right' }, value: 0 }, 45 { name: 'RecordId', type: 'hidden', value: 0 } 46 ] 47 }); 48 49 50 $("#tblAppendGrid").on("blur", "input,select",function() { 51 52 //alert("名前:" + $(this).attr("id") + " / 値:" + $(this).val() + " / 有効日:1"); 53 54 //alert($(document.forms[0]).serialize()); 55 56 // シリアライズデータを退避 57 $.cookie( 58 "GRID", 59 $(document.forms[0]).serialize(), 60 1); // 有効期限(1日) 61 62 63 //alert("f行数は:" + $("#tblAppendGrid tbody")[0].childNodes.length); 64 65 // グリッドの行数を退避 66 $.cookie( 67 "ROWS", 68 $("#tblAppendGrid tbody")[0].childNodes.length, 69 1); 70 71 //alert("クッキー登録済み:" + $.cookie("GRID")); 72 }); 73 74/* 75 $("#gridOuter").on("", "",function() { 76 // グリッドの行数を退避 77 //alert("f行数は:" + $("#tblAppendGrid tbody")[0].childNodes.length); 78 $.cookie( 79 "ROWS", 80 $("#tblAppendGrid tbody")[0].childNodes.length, 81 1); 82 }); 83*/ 84 85 var cookies = $.cookie("GRID"); 86 87 $(cookies.split("&")).each(function() { 88 var keyVal = this.split("="); 89 var key = decodeURI(keyVal[0]); 90 var val = decodeURI(keyVal[1]); 91 92 var item = $("#" + key); 93 94 // チェックボックスとラジオボタンは、val が "" ブランクのとき、チェック無しとする 95 if (/(checkbox|radio)/i.test(item[0].type)) { 96 item.attr("checked", val != null && val != "" ? "checked" : ""); 97 } else { 98 item.val(val || ""); 99 } 100 }); 101 102}); 103</script> 104</head> 105<body> 106<form> 107 <div id="gridOuter"> 108 <table id="tblAppendGrid"></table> 109 </div> 110 <button>送信</button> 111</form> 112</body> 113</html> 114

投稿2015/02/03 04:27

ipadcaron

総合スコア1693

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

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

退会済みユーザー

退会済みユーザー

2015/02/03 13:29

ipadcaron様 ありがとうございます。 ローカル環境で試してみました。と言っても単にPC上ですが・・・ そのままHTMLで試すと理想通りの動作でページをリロードしても保持されておりました! ただ、実際の環境(と言ってもまだ作成中ですのでVMWareの仮想環境)で試しましたが何かが引っかかってテーブルのレイアウトが崩れ行の追加ボタンなども非表示になってしまいます。厳密に言いますとテキストフィールドが5つだけ表示されるだけです。 Firebugで見ますと TypeError: $.cookie is undefined $.cookie.raw = true; と表示されておりますが、何かお分かりになりますでしょうか? よろしくお願いします。
ipadcaron

2015/02/03 13:46

jquery.cookie.js が読み込めてないのでしょうかね。 アップロードし忘れとか? 昨日見知った知識ですが、header.php に外部ファイルの読み込み関係をまとめるんですよね? とりあえずローカルで動作確認できて何よりです。
guest

0

http://mypacecreator.net/blog/archives/2063
このHPを見ると、入力項目が細かくてフロントの見た目に凝りたい場合はカスタムで!
ってかいてあります。
PHPができないとまずいのでは?
appendGrid は、画面で「+」を押すと入力行が追加され、「−」を押すと入力行が減ります。
つまり、入力可能な行数が可変なのですが、この可変という部分がまずポイントになるかと。
wordpress のHPを結構見てみました。MW_WP_Formメールフォームと jQuery を連携する
場合の具体的なやり方を書いている人が居ないか探しました。
MWメールフォームプラグインの管理画面では、ベタのHTMLはゴリゴリ記述可能なようですが、
appendGrid は入力のパラメータに基づいて画面を動的に構築します。なので、最初に言った
初期値をJSON形式で設定すればいけるんじゃ?ないの、という話は管理画面では記述できない
ようです。そもそも、JavaScript に変数の内容を埋め込む、というやり方も出来なさそうで
すし。

無理やりこじつけで実装する場合もなくはないとおもいますが、僕が知りたいのは以下の通りです。
これがわかればたぶん、appendGrid でもいけるとおもいますが、行数が「可変」するという部分
に関しては制限が必要になるかもしれません。例えば最大10行まで入力可能として、最初から10
行出しておく、あるいは、「+」ボタン押下で最大行数を判定するか、appendGrid に最大行数の
設定が可能かもしれませんが。。。

知りたいこと
(1)ワードプレスで作成したメールフォームのHTMLが知りたい。
品番、品名、色、数量、を2個ずつ管理画面に記述して、生成された画面のHTMLソースの
これらの入力欄のHTMLを見せてください。

   管理画面でフォームを記述する場合、同じ名前だと配列で取れるのか、同じ名前はNGで
部品1個につき固有の名前である必要があるのかを確認してください。

 ※ワードプレスの管理画面に記述したフォームは、F5や画面を更新(SUBMITボタン)しても
入力内容は保持されるのですよね?

たぶん、上記HPの作者さんは、凝った画面の場合はPHPをガリガリ描いたほうがいいみたいなこと言っているのでワードプレスとPHPに詳しい方の意見も聞いたほうがいいとおもいます。自分は残念ながらPHPは疎いです。

僕の「知りたいこと」から実現可能な画面は、
(1)「+」ボタンは無限に押せない。最大入力行数に制限をかける必要がある。
(2)(1)の制限以外はすべて JavaScript で実現し、PHPなどは使わない。
(3)最大行数が例えば5行のとき、品番、品名、色、数量、サイズ、で合計5項目x5行=25項目を
あらかじめ定義しておき、画面上見えないように配置する(CSSで非表示にする)。隠しておいた
フォーム内容を画面の onload で appendGrid に設定する。
(4)送信ボタン押下時に、イベントをハンドルして、appendGridの入力内容を隠してあるフォームに
貼り付けてから送信する。

MW_WP_Form プラグインのフォームがF5や送信ボタン押下前後の入力内容が保持されるのは、管理画面に
証跡があるからだと踏んでいます。つまり、管理画面にフォーム部品として定義したものだけが入力内容が
保持されると。なので、最大行数に制限を設ける、というのは管理画面の制約になります。

以上です、考え方間違っているかもしれませんが、PHPで専用フォームを作った方が早いとおもいますが、
PHPに詳しくない自分にはなんとも言えません。JavaScript だけでできる範疇での回答になります。

たぶんですが、送信されるメール内容も、画面の入力行数が5行なら、メール本文も5行固定になる
かもしれません。2行しか入力していなくても、5行(残り3行はブランク?)になります。

JavaScriptだけだとこれが限界だと思いますね。

いっぱい書いといて、、、、最初の質問読み返してふと疑問が・・・
>入力した内容をメールで送信すると云う寸法ですが、メールの送信自体は問題無いのですが
>入力した内容をCookieで保持したいのですが方法が分かりません。
これって、appendGrid で2行入力しても、メールに2行の入力内容が貼り付けられるとこまでは完成している、ってことですか?だから本当に、知りたいのはクッキーで送信前の値を保持しておいて、入力内容が消えない
ようにしたいってことだけなんですか?

appendGrid のシリアライザーは、
「品番」カラムが3個あるとき、品番1, 品番2, 品番3 て感じで通し番号を割り振ります。
数字部分が行番号になるわけです。

投稿2015/02/02 14:26

ipadcaron

総合スコア1693

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

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

ipadcaron

2015/02/02 16:24

wordpress jQuery 使い方 https://ja.forums.wordpress.org/topic/3246 wordpress デフォルトのjQuery をキャンセルして、jQueryUI が動くバージョンを ロードさせる方法(記事の内容とはちょっと違うけど、jqueyUI を完全動作させるに はそのUI が要求する jquery バージョンが必須であり、wordpress デフォルトの jquery が UI の要求バージョンと異なっているとうまく動かない可能性があるから) http://sensebahn.com/develop/389/ wordpress jquery.cookie.js の使い方 http://riyomaru.minibird.jp/wordpress/358/ なんか、もう少し調べてみると、PHP をちょっと工夫すればできそうな感じが してきました。でも、自分はPHP詳しくないので、いっそ、上記HPの方に質問を投げて みてはどうでしょうか。
退会済みユーザー

退会済みユーザー

2015/02/02 23:40

ご回答ありがとうございます。 そして色々調べて頂いてありがとうございます。 今日は朝からバタバタしてまして、お返事させて頂くのが精一杯です。 夜には内容をまとめてお返事させて頂きますので何卒宜しくお願いします。 PS. appendGridで追加した複数行に入力した全ての内容がメールで送信出来ております。
guest

0

メール送信用データがフォーム送信されてきたら、
再表示用の画面を作る PHP?JSP?内で、

lang

1 $('#tblAppendGrid').appendGrid('load', [ 2 { 'Album': 'Dearest', 'Artist': 'Theresa Fu', 'Year': '2009', 'Origin': 1, 'Poster': true, 'Price': 168.9, 'RecordId': 123 }, 3 { 'Album': 'To be Free', 'Artist': 'Arashi', 'Year': '2010', 'Origin': 3, 'Poster': true, 'Price': 152.6, 'RecordId': 125 }, 4 { 'Album': 'Count On Me', 'Artist': 'Show Luo', 'Year': '2012', 'Origin': 2, 'Poster': false, 'Price': 306.8, 'RecordId': 127 }, 5 { 'Album': 'Wonder Party', 'Artist': 'Wonder Girls', 'Year': '2012', 'Origin': 4, 'Poster': true, 'Price': 108.6, 'RecordId': 129 }, 6 { 'Album': 'Reflection', 'Artist': 'Kelly Chen', 'Year': '2013', 'Origin': 1, 'Poster': false, 'Price': 138.2, 'RecordId': 131 } 7 ]);

こうしてあげれば良いかと。
サンプルそのまま貼り付けただけですが。

投稿2015/02/02 06:50

ipadcaron

総合スコア1693

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

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

退会済みユーザー

退会済みユーザー

2015/02/02 07:10

ご回答ありがとうございます。 最初から記しておけばよかったのですが追記で実際に使用しているコードを書きました。 よろしくお願いします。
ipadcaron

2015/02/02 07:59

ページをリロードする、という部分ですが、 (1)F5キーを押す (2)フォームをsubmitして再表示する どっちなんですか? (2)の場合、サーバー処理(PHP/JSP)で送信されたデータを受け取れるとおもいます。メール送信するとこまでは完成しているのですからね。 で、PHP/JSP の「前回のデータを再表示する」ために、 $(document).ready(function() { $("cccc").appendGrid("load",{ // ここに前回表示したデータを JSON 形式で並べればいいかと。 }); });
ipadcaron

2015/02/02 08:03

実際に使用しているコードは、ヘッダ部分とそのカラムの入力形式を定義したものですよね。僕が言っているのも、あなたが言いたいのも同じだと思うのですが、SUBMIT ボタン押下前と押下後の入力内容が変化しない状態にしたいってことだとおもいます。 PHPはちょっと知識不足なんですが、JSPで良ければサンプル書きましょうか?
ipadcaron

2015/02/02 08:09

コンタクトフォームについて、もう少し情報くれますか? Java/Jsp なのか、フォーム生成ツール上で動作する画面なのか、jQueryUI を使う時点でHTMLであることは確定していると思うのですが、それ以外の環境がさっぱり見えません。
退会済みユーザー

退会済みユーザー

2015/02/02 09:21

ご回答ありがとうございます。 情報不足ですみません。 WordPressでMW WP Formと云うプラグインを用いてフォームを作りました。 MW WP Formでcookieを使用しているのだと思うのですが、MW WP Formで作成した入力欄に入力した情報はsubmitでもF5キーでも保持するのですが、実現したいのはsubmitの時だけで良いです。紛らわしくてすみません。
guest

0

Demo の Load Data サンプルのHTMLサンプルコードを見ると、初期値は JSON 形式で指定できるようですよ。
クッキー使わなくてもいけるのでは?

投稿2015/02/02 05:40

ipadcaron

総合スコア1693

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

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

退会済みユーザー

退会済みユーザー

2015/02/02 06:44

ご回答ありがとうございます。 初期値とは最初から表示させる文字の事なのでしょうか? 当方が実現させたい事は、コンタクトフォームの利用者がテキストボックスに入力した文字をページをリロードしても保持したいのですが、JSON 形式で指定させるのであればどのうように記せば良いのでしょうか? よろしくお願いします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問