やりたいこと
・submitで画面遷移(画面更新)せずに、onSubmitで指定した関数を呼びたい
起きている問題
・onSubmitでreturn falseしているのに、画面全更新が行われる場合がある。
・A~Dの4画面に同じ処理があるが、Dの画面だけで必ず毎回起きる。
・A~CとDの違いは、onSubmitで呼ぶ関数の中で、ページ内のiframeをリロードするかどうか。
・Dは、リロードしない(リロードするiframeがないため)。
・対策として、Dのformタグに action="#"を入れると起きなくなった。
・その後、現象を再現させるために変更前に戻すと、現象が再現しなくなった(submit=画面全更新が行われなくなった)。
知りたいこと
「onSubmitでsubmitを行わせない=画面全更新をしないようにさせる方法は、
onSubmitに指定する内容が"return false;"であること。
つまり、下記3つのどの書き方でもOK」
という認識が、正しいかどうか。
もし認識が間違っているのであれば、どのように書くのがベストか。
HTML5
1<form onSubmit="return false;"> 2<form onSubmit="onOkButton();return false;"> 3<form onSubmit="return onOkButton();">※onOkButton()の最後にfalseを返却
今のコード
HTML5
1<form action="#" onSubmit="onOkButton();return false;"> 2<input value="" type="number" step="0.01" min="-99.99" max="99.99" required> 3<button type="submit">OK</button> 4</form>
JavaScript
1 var reqTimeout = 10000; 2 var reqURL = 'XXX/XXX' 3 4 function onOkButton() { 5 set(); 6 } 7 8 function set() { 9 var setWL1; 10 var input_WL_Lv1 = document.getElementById('input_WL_Lv1'); 11 12 if (input_WL_Lv1) setWL1 = Number.parseFloat(input_WL_Lv1.value); 13 postData2Server(reqURL, { 14 "WL_Lv1": setWL1 15 }, 16 reqTimeout, { 17 'onSuccess': function(resp) { 18 var iframe = document.getElementById("iframe"); 19 if (iframe) { 20 iframe.contentWindow.location.reload(); 21 } 22 }, 23 'onError': function() { 24 console.log("Error"); 25 }, 26 'onTimeout': function() { 27 console.log("Timeout"); 28 } 29 }); 30 } 31 32 function postData2Server(reqURL, data, timeout, callback) { 33 if (document.baseURI.startsWith('file://')) { 34 return; 35 } 36 var req = new XMLHttpRequest(); 37 req.timeout = timeout; 38 req.ontimeout = callback.onTimeout; 39 req.onreadystatechange = function() { 40 if (req.readyState === 4) { 41 if (req.status === 200) { 42 if (req.responseText === 'OK') { 43 callback.onSuccess(); 44 } else { 45 console.log('Error: req.responseText is not OK'); 46 callback.onError(); 47 } 48 } else { 49 console.log('Error: req.status is not 200'); 50 callback.onError(); 51 } 52 } 53 delete req; 54 } 55 req.open('POST', reqURL, true); 56 req.setRequestHeader('content-type', 'application/json'); 57 req.send(JSON.stringify(data)); 58 } 59
最後になりますが、ご助力よろしくお願いいたします。
回答2件
あなたの回答
tips
プレビュー