「form.submit();」のインスタンスを動的に変更したい $('form').submit(); に対する特定の選択要素の onchange 関数に表示されます。フォーム自体に対して送信イベントがトリガーされるようにします。
onchange 関数を更新する必要がある選択リストの例を次に示します。
<td class="form-field selectinput" align="left" valign="left" style="width: 90px;" title="Select status type">
<select class="filterlist" name="cStatus" tabindex="5" style="width: 90px;" onchange="form.submit();">
<option value="" title="[All]">[All]</option>
<option value="A" title="Authorised">Authorised</option>
<option value="C" selected="" title="Cancelled">Cancelled</option>
<option value="U" title="Declined">Declined</option>
<option value="R" title="Requested">Requested</option>
<option value="T" title="Taken">Taken</option>
<option value="W" title="Withdrawn">Withdrawn</option>
</select>
</td>
ページのヘッダー セクションに次のコードを挿入して、関数の更新を試みます。
$(document).ready(function(){
$(function() {
$('select').each(function() {
var txt = this.onchange ;
alert(txt);
var patt=/form.submit()/g;
var result=patt.test(txt);
if (result) {
var txt = txt.replace('form.submit()',"");
this.onchange = eval(txt);
}
});
});
});
警告メッセージは次のように表示されます。
関数 onchange(イベント) { form.submit(); ブロッククオート
その後、コンソール ログに次のエラーが表示されます。
キャッチされていない TypeError: オブジェクト関数 onchange(event) { form.submit(); メソッド「replace」がありません
私は実際に次のように動作させることができます:
this.onchange = function() { $('form').submit(); }
ただし、onchange に form.submit(); 以外のコードが含まれている場合があります。そのような:
form.submit();form.iYear.disabled=true;form.cGroupItem.disabled=true;
そのため、関数全体を置き換えるのではなく、「form.submit();」を切り取ります。これを '$('form').submit();' に置き換えると、上記は次のようになります。
$('form').submit();form.iYear.disabled=true;form.cGroupItem.disabled=true;
さまざまな場所で toString() と eval() を使用してみましたが、文字列 txt を編集しようとすると、オブジェクトにメソッド エラーがありません。
何か案は??