
新米プログラマーです。
JavascriptとJavaでショッピング画面を作っています。
以下のコードで function doActionShoppingEntry(){ で登録用のフォームを表示して、
function doActionShoppingAdd(){ Ajax通信で登録処理を行っています。
var data = $('#fmShoppingDetail').serialize(); でフォームの内容をシリアライズしようと
しているのですが、うまくシリアライズされず data は空っぽのままです。
読み込む順番とか、スコープの問題かな、とも思ったんですけど、
var data_shoppingDate = $('#shoppingDate').val(); や
var data_hinme = $('#hinmei').val();
は認識されて、空欄チェックをちゃんとしてくれます。
いろいろやってみたのですが、シリアライズされない状況が続いています。
どなたかヒントを頂くなりお願いできますでしょうか。
よろしくお願いします。
// ■お買物登録
// 登録画面表示
function doActionShoppingEntry(){
var space = "";
space += '<form id="fmShoppingDetail">'
+ '<tr>'
+'<th>購入日</th>'
+'<td><input type="text" id="shoppingDate" /></td>'
+ '</tr>'
+ '<tr>'
+ '<th>場所</th>'
+ '<td><input type="text" id="place" /></td>'
+ '</tr>'
+ '<tr>'
+ '<th>品名</th>'
+ '<td><input type="text" id="hinmei" /></td>'
+ '</tr>'
+ '<tr>'
+ '<th>金額</th>'
+ '<td><input type="text" id="kingaku" /></td>'
+ '</tr>'
+ '<input type="button" onclick="doActionShoppingAdd();" value="登録" />'
+ '<input type="hidden" id="customerId" value="' + $('#customerId') + '" />'
+ '</form>';
var obj = document.getElementById("datatableShoppingAdd");
obj.innerHTML = space;
// お買上日
$(function(){
$('#shoppingDate').datepicker();
$("#shoppingDate").datepicker("option", "dateFormat", "yy/mm/dd");
} );
}
// 登録
function doActionShoppingAdd(){
// 必須項目の入力チェック
var data_shoppingDate = $('#shoppingDate').val();
if(data_shoppingDate == ""){
window.alert('購入日は空白では登録できません。');
return false;
}else{
var data_hinme = $('#hinmei').val();
if(data_hinme == ""){
window.alert('品名は空白では登録できません。');
return false;
}
}
if(window.confirm("登録していいですか?")){
var data = $('#fmShoppingDetail').serialize(); ←ここです。
$('#gon').text("登録内容は" + data); //gon内のテキストに表示
console.log("data[0]==========" + data[0]);
$.post('/shoppingadd',data,function(resp, status, XHR){
if(status == "success"){
$('div#status').text("登録しました。");
}
});
}else{
return false;
}
}
No.3ベストアンサー
- 回答日時:
ANo2です。
ご質問文から、datepickerやajaxの部分を除いて試してみましたが、こちらの環境ではシリアライズできています。
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="ja">
<head><title>test</title>
<meta http-equiv="Content-Style-Type" content="text/css">
<meta http-equiv="Content-Script-Type" content="text/javascript">
<script type="text/javascript" src="http://www.google.com/jsapi"></script>
<script type="text/javascript">google.load("jquery","1");</script>
</head>
<body>
<div id="datatableShoppingAdd"></div>
<script type="text/javascript">
<!--
// 登録画面表示
function doActionShoppingEntry(){
var space = "";
space += '<form id="fmShoppingDetail" name="fmShoppingDetail">'
+ '<input type="hidden" id="customerId" name="customerId" value="test" />' // + $('#customerId') + '" />'
+ '<tr>'
+'<th>購入日</th>'
+'<td><input type="text" id="shoppingDate" name="shoppingDate" /></td>'
+ '</tr>'
+ '<tr>'
+ '<th>場所</th>'
+ '<td><input type="text" id="place" name="place" /></td>'
+ '</tr>'
+ '<tr>'
+ '<th>品名</th>'
+ '<td><input type="text" id="hinmei" name="hinmei"/></td>'
+ '</tr>'
+ '<tr>'
+ '<th>金額</th>'
+ '<td><input type="text" id="kingaku" name="kingaku" /></td>'
+ '</tr>'
+ '<input type="button" onclick="doActionShoppingAdd();" value="登録" />'
+ '</form>';
var obj = document.getElementById("datatableShoppingAdd");
obj.innerHTML = space;
}
// 登録
function doActionShoppingAdd(){
// 必須項目の入力チェック
var data_shoppingDate = $('#shoppingDate').val();
if(data_shoppingDate == ""){
window.alert('購入日は空白では登録できません。');
return false;
}else{
var data_hinme = $('#hinmei').val();
if(data_hinme == ""){
window.alert('品名は空白では登録できません。');
return false;
}
}
if(window.confirm("登録していいですか?")){
var data = $('#fmShoppingDetail').serialize();
alert(data); // ← ********* 追加 **********
/*
$('#gon').text("登録内容は" + data); //gon内のテキストに表示
console.log("data[0]==========" + data[0]);
$.post('/shoppingadd',data,function(resp, status, XHR){
if(status == "success"){
$('div#status').text("登録しました。");
}
});
*/
}else{
return false;
}
}
doActionShoppingEntry();
//-->
</script>
</body>
</html>
No.2
- 回答日時:
ANo1です。
>3)console.log(document.getElementById("fmShoppingDetail")[1]);
[0]ではなく[1]って…
同じidのフォームが2箇所以上存在するってことでしょうか?
まずは、同じidの要素が存在するってことが文法違反では?
あと、なんだか気になってきたのは、fmShoppingDetailって本当にform要素のidなんでしょうか?
element.serialize()のelementはformのjQueryオブジェクトを指定するはずなんですけれど。
この回答への補足
それと、ことによるとシリアライズできないのかと思い、通常のForm
の送信(method="pose" action="/snoppingadd" 等を指定して)してみたのですが、
ウンともスンとも言ってくれず、動作しませんでした。
Javascriptで出力したFormは通常のHTML内のフォームと異なるのでしょうか?
また、それが原因でシリアライズできないのでしょうか?
よろしくおねがいします。
fujillinさん、回答ありがとうございました。
console.log(document.getElementById("fmShoppingDetail")[1]);
については
"fmShoppingDetail"が構成する2つ目のinput要素と理解していました。
ですので、ここには「購入日」に関する情報が入ってくると思っていました。
よくわかっていないようです。
「element.serialize()のelementはformのjQueryオブジェクトを指定するはず」
の意味がよくわかりませんでした。
わかりにくいと思い、script部分をすべてコピペしようと思ったら4千文字
超えてしまったので、今回の「お買物登録」部分のすべてだけを再度下に示します。
すべてのformを載せることができませんが、再度確認しましたが、FormのIDが重複
しているものはありませんでした。
よろしくお願いします。
// ■お買物登録
// 登録画面表示
function doActionShoppingEntry(){
var space = "";
space += '<form id="fmShoppingDetail" name="fmShoppingDetail">'
+ '<input type="hidden" id="customerId" name="customerId" value="' + $('#customerId') + '" />'
+ '<tr>'
+'<th>購入日</th>'
+'<td><input type="text" id="shoppingDate" name="shoppingDate" /></td>'
+ '</tr>'
+ '<tr>'
+ '<th>場所</th>'
+ '<td><input type="text" id="place" name="place" /></td>'
+ '</tr>'
+ '<tr>'
+ '<th>品名</th>'
+ '<td><input type="text" id="hinmei" name="hinmei"/></td>'
+ '</tr>'
+ '<tr>'
+ '<th>金額</th>'
+ '<td><input type="text" id="kingaku" name="kingaku" /></td>'
+ '</tr>'
+ '<input type="button" onclick="doActionShoppingAdd();" value="登録" />'
+ '</form>';
var obj = document.getElementById("datatableShoppingAdd");
obj.innerHTML = space;
// お買物登録を表示
$('#datatableShoppingList').hide();
$('#datatableShoppingDetail').hide();
$('#datatableShoppingAdd').show();
// お買上日
$(function(){
$('#shoppingDate').datepicker();
$("#shoppingDate").datepicker("option", "dateFormat", "yy/mm/dd");
} );
}
// 登録
function doActionShoppingAdd(){
// 必須項目の入力チェック
var data_shoppingDate = $('#shoppingDate').val();
if(data_shoppingDate == ""){
window.alert('購入日は空白では登録できません。');
return false;
}else{
var data_hinmei = $('#hinmei').val();
if(data_hinmei == ""){
window.alert('品名は空白では登録できません。');
return false;
}
}
if(window.confirm("登録していいですか?")){
var data = $('#fmShoppingDetail').serialize();
$('#gon').text("登録内容は" + data); //.ser内のテキストに表示
console.log("data=================" + data);
console.log("$('#shoppingDate').val()=====" + $('#shoppingDate').val());
console.log("$('#hinmei').val()=====" + $('#hinmei').val());
console.log("document.getElementById('fmShoppingDetail')[0]=====" + document.getElementById("fmShoppingDetail")[0]);
console.log("data[0]==========" + data[0]);
console.log("data[1]==========" + data[1]);
$.post('/shoppingadd',data,function(resp, status, XHR){
console.log("resp==========" + resp);
console.log("status==========" + status);
console.log("XHR==========" + XHR);
if(status == "success"){
$('div#status').text("登録しました。");
}
});
}else{
return false;
}
}
-->
</script>
No.1
- 回答日時:
インプット要素にname属性を設定すればよいのでは?
fujillinさん、回答ありがとうございました。
教えて頂いた通りFormの中のすべてのinput要素にname属性を設定して
みました。値はid属性と同じものを設定しました。
残念なことに、それでもシリアライズされず data は空っぽのままです。
いくつか調べたことをご報告します。
1)console.log( $('#shoppingDate').val());
2)console.log( $('#hinmei').val());
3)console.log(document.getElementById("fmShoppingDetail")[1]);
4)console.log("data[0]==========" + data[0]);
1)と2)はちゃんと値がセットされますが、3)と4)は undefined と
なって帰ってきます。
「Form上には値が存在するが、シリアライズされていない」
ことを表しているのでしょうか。
何かヒントになることを教えて頂けないでしょうか。
よろしくおねがいします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- AJAX JavascriptからPHPへのAjax通信でnullが返ってくる 3 2022/08/03 22:00
- JavaScript EasyUIのSubGrid(jquery)におけるObjectに入れた連想配列について 1 2022/05/02 11:21
- JavaScript javascriptでテーブルに追加した項目のid追加してローカルストレージを操作したい 5 2023/01/01 15:52
- JavaScript 追加ボタンを押した際に ok ボタンを押した場合のみ入力値が追記されるようにしたいです 6 2022/05/29 09:57
- JavaScript コードレビューをお願いします。 1 2022/07/16 05:38
- JavaScript jQueryでのドラッグアンドドロップについて 1 2022/07/07 21:04
- JavaScript javascript作成してます。ラジオボタンで判定するコードを書いてます。 1 2023/07/18 11:03
- JavaScript ①入力フォーム→②確認表示画面→③送信完了画面のコードを書いているのです、 入力フォームから受け取っ 2 2022/05/10 16:45
- JavaScript javascriptのちょっとした動作不良(原因は突き止めたのですが) 1 2023/06/15 19:58
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
table などの height を外から...
-
ラジオボタンが選択されたらテ...
-
innerHTMLで自動生成された表を...
-
テキストボックスの中に文字と...
-
クリックした行の背景色の変更
-
チェックボックス付きのテーブ...
-
画面表示とともにtableの指定の...
-
表の中のセルの位置を把握した...
-
return trueとreturn falseの用...
-
Selectボックスの幅を自動で広...
-
【jsp/Java】チェックボックス...
-
hiddenのvalueの値を変えたい
-
value.replaceがうまく動作しま...
-
【javascript・PHP】プルダウン...
-
カーソルが当たった箇所に吹き...
-
ツールチップにテーブル左端列...
-
フォーム内で記入したクエリ送...
-
JSPとJavaScriptの連携について...
-
VBSでブラウザ上のテキストボッ...
-
javaScriptの変数をJavaの変数...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
チェックボックス付きのテーブ...
-
画面表示とともにtableの指定の...
-
JavaScriptの「.querySelectorA...
-
Javascriptの電卓で最初の何も...
-
複数のselect値で1つも選択され...
-
ボタンクリックでフォーカス移動
-
テーブル内のチェックボックス...
-
クリックした行の背景色の変更
-
jQueryで合計を出したい
-
文字数を数える際に空白、改行...
-
インラインフレームを利用した...
-
ラジオボタンを一括で操作する...
-
画面の2重起動をチェックする...
-
メールフォームについて
-
.NETを使用せずに、ASP・VBScri...
-
SCRIPT及びソースを教え...
-
同一nameの input type="text"...
-
テーブルの一部を入力フィール...
-
フォームの入力チェック方法
-
localStorageでのcheckbox制御
おすすめ情報