ajax呼び出しを使用してhtmlコンテンツを取得するWebページがあり、ajax呼び出しもフォーム要素を返しました。
ajax を使用してフォームをページに追加した後、フォームを送信しようとすると、フォーム要素が未定義であるというエラーが表示されます。
コードは次のようなものです。
$.ajax({
type: "GET",
url: "url/" + $("#search_id").val(),
async: false,
dataType: "html",
error: function(XMLHttpRequest, status, errorThrown) {
alert("Error!!");
},
success: function (data, status) {
$("#parent-element").html("");
$("#parent-element").append(data);
},
complete: function() {
}
});
//Delegate click event
$('body').delegate('div#footer #submit1','click', function() {
var form_element=document.getElementById('search_form');
verifyChecked(form_element);
});
function verifyChecked (form_obj) {
var formname = form_obj.name;
var orig_query = document[formname].query.value;
if (orig_query == "") {
return false;
};
form_obj.submit();
return false;
}
上記のコード スニペットは ajax 呼び出しを行い、次のようなフォーム要素を持つ html コンテンツを追加します。
<form id="search_form">
<input type="hidden" value="SOMETHING" name="search">
<input id="query_data" type="text" value="test" name="query">
</form>
ここで、送信ボタンをクリックすると、次のエラーが表示されます: TypeError: document[formname].query is undefined
修正にご協力ください。
注: 問題は、フォーム要素がフォームにバインドされていないことです。入力要素は HTML で表示されますが、DOM にはないと思います。そのため、フォームの送信に入力要素がありません。
問題は、フォームにバインドされた入力要素を取得したいのですが、どうすればこれを行うことができますか? DOM をリロードする必要がありますか?どうすればよいですか?
これはまさに私がやろうとしていることです: JS Bin Example
私は今解決策を見つけました。以前の私のフォームは次のようなものでした:
<form name="search" id='search_form' action="https://mysearch/search?" onSubmit="return verifyChecked(this);">
<tr>
<td id="input_p" width="100%">
<input type="hidden" value="SOMETHING" name="search">
<input id="query_data" type="text" value="test" name="query">
</td>
<td>
<input type="image" src="graphics/search.gif" id="submit1" />
</td>
</tr>
</form>
これで、フォーム タグを入力タグと同じ td 内に移動しました。
<tr>
<td id="input_p" width="100%">
<form name="search" id='search_form' action="https://mysearch/search?" onSubmit="return verifyChecked(this);">
<input type="hidden" value="SOMETHING" name="search">
<input id="query_data" type="text" value="test" name="query">
</form>
</td>
<td>
<input type="image" src="graphics/search.gif" id="submit1" />
</td>
</tr>
そしてビンゴ..それは働き始めました。なぜ機能するのか説明がありません。上記のページに同じフォームとDOM構造があり、完全に機能しますが、ajax呼び出しによって返されるフォームタグでは機能しません。説明は、なぜそれが機能するのかを理解するのに役立ちます。