フォーム内のボタンがクリックされたときにページの更新を防ぐ


149

フォーム内のボタンの使用中に問題が発生しました。そのボタンで関数を呼び出して欲しい。できますが、ページが更新されるという望ましくない結果が生じます。

私の簡単なコードはこのようになります

<form method="POST">
    <button name="data" onclick="getData()">Click</button>
</form>

ボタンをクリックすると、ページが更新されて関数が呼び出され、前のリクエストの結果である現在のページに影響する前のリクエストがすべてリセットされます。

ページの更新を防ぐにはどうすればよいですか?


単純にwindow.location = window.location.hrefを使用する場合は、パラメーターを指定する必要があります。ページ全体を更新し、以前のリクエストをすべてリセットします。:このチェックしてくださいstackoverflow.com/questions/133925/...
リングイネ


@bunkdeath:不正解の回答を受け入れる必要があります。
Jad Chahine

@JadChahine申し訳ありません、私は答えを受け入れていないことに気づきませんでした。これを指摘してくれてありがとう。私は初心者だったので、当時何をしていたのか、何もしていないのかわかりませんでした。しかし、私はあなたが言った答えを受け入れるつもりはありません。むしろ、そのとき私を助けてくれたものを受け入れます:)
bunkdeath

回答:


67

ましょうgetData()リターン偽を。これで修正されます。

<form method="POST">
    <button name="data" onclick="return getData()">Click</button>
</form>

1
確かに。onclickこの関数は、偽を返すようにしていませんgetData
Quentin

1
それが私がメンターしていることですが、大丈夫です、答えを修正してより明確にしました。
JNDPNT、2011年

5
関数を変更する必要はありません。onclick= "getData(); return false;"を使用するだけです。

2
type="button"本当にキャッチです。
ディープセル

340

type="button"ボタンに追加します。

<button name="data" type="button" onclick="getData()">Click</button>

typeボタンのデフォルト値はですsubmit。これは、フォームを自分のケースに自動送信し、更新のように見せます。


8
ここで与えられた完璧な答え
timberlake 2014年

2
これを除いて、HTML5フォームの検証(type = "email"の入力など)を防止します。
2540625 2015

2
return false;onclickに追加することもできます:onclick="getData(); return false;"
JBaczuk

1
これが最良の選択肢です。「return false」はインラインで機能する可能性がありますが、イベントリスナーを追加する場合、そのようなオプションはありません。type = "button"を指定すると、その日が本当に節約されます。
永遠にNoob 2016年

1
これは実際には、この種の問題に対する「公式」の解決策です。false MIGHTを返すことも機能しますが、タイプボタンが失敗することはありません。
Student0495

18

あなたがする必要があるのはtypeタグを付けてtypeボタンを作ることだけです。

<button id="btnId" type="button">Hide/Show</button>

これで問題は解決します


2
理由を詳しく説明してください。
mjk

ボタンのデフォルトの動作はフォーム内の送信タイプであり、ボタンタイプに変更すると、送信を回避できます
Ganesh Kodiganti

16

問題は、フォームの送信をトリガーすることです。getData関数を作成return falseすると、フォームの送信が停止されます。

または、preventDefaultイベントオブジェクトのメソッドを使用することもできます。

function getData(e) {
    e.preventDefault();
}

渡されるクリックイベント。
JNDPNT、2011年

(それ以上の変更なしでは)イベントオブジェクトが渡されない場合を除きます。
Quentin

<button name = "data" onclick = "getData($ event)">クリック</ button>
RoboMex

9

HTML

<form onsubmit="return false;" id="myForm">
</form>

jQuery

$('#myForm').submit(function() {
    doSomething();
});

$( '。myForm)は$('#myForm)でなければなりません
Mutant

3
<form method="POST">
    <button name="data" onclick="getData()">Click</button>
</form>

buttonタグを使用する代わりに、inputタグを使用します。このような、

<form method="POST">
    <input type = "button" name="data" onclick="getData()" value="Click">
</form>

これはのようボタンを作成did'tbutton type='button'
Pardeepジャイナ

3

ボタンがデフォルトの「ボタン」の場合は、type属性を明示的に設定してください。そうでない場合、WebFormはデフォルトで送信として扱います。

あなたがjsを使うなら、このようにします

<form method="POST">
   <button name="data"  type="button" id="btnData" onclick="getData()">Click</button>
</form> 

**If you use jquery use like this**


<form method="POST">
   <button name="data"  type="button" id="btnData">Click</button>
</form>




$('#btnData').click(function(e){
   e.preventDefault();
   // Code goes here
getData(); // your onclick function call here

});

2

ボタン自体を無効にするJavaScriptメソッド

document.getElementById("ID NAME").disabled = true;

すべてのフォームフィールドが基準を満たしたら、ボタンを再度有効にすることができます

Jqueryを使用すると、このようなものになります

$( "#ID NAME" ).prop( "disabled", true);

0

Firefoxでは何らかの理由でreturn false;myform.preventDefault();関数を使用していますが、関数の実行後にページが更新されます。これが良い習慣かどうかはわかりませんが、私にとってはうまくいきjavascript:this.preventDefault();ます。action属性に挿入します。

先ほど述べたように、他のすべての提案を試しましたが、Firefoxを除くすべてのブラウザーで正常に動作します。同じ問題が発生する場合は、アクション属性javascript:return false;またはのいずれかにpreventイベントを追加してみてくださいjavascript:this.preventDefault();javascript:void(0);あなたのコードを壊すでしょうかで試してはいけません。理由を聞かないでください:-)。

これはエレガントな方法だとは思いませんが、私の場合、他に選択肢はありませんでした。

更新:

エラーを受け取った場合... ajaxが処理された後、属性アクションを削除し、onsubmit属性で関数を実行してからfalseを返します。

onsubmit="functionToRun(); return false;"

Firefoxでこのような問題がすべて発生する理由はわかりませんが、これが機能することを願っています。


0

リターン関数がすべてのケースで機能しているわけではありません。私はこれを試しました:

<button id="Reset" class="Button-class" onclick="return Reset()">Show result</button>

うまくいきませんでした。

関数内でfalseを返そうとしたが、うまくいった。

function Reset()
{
    .
    .
    .
    return false;
}

0

私も同じ問題に直面していました。問題はonclick関数にあります。機能に問題はありませんgetDataonclick関数をfalseに戻すことで機能しました。

<form method="POST">
    <button name="data" onclick="getData(); return false">Click</button>
</form>

0

これは最良の解決策です:

<form  method="post"> 
    <button  type="button" name="data" onclick="getData()">Click Me</button>
</form>

注:私のコードは非常に単純です。


-2

この問題を解決するには、ajaxとjqueryを使用できます。

<script>
    function getData() {
        $.ajax({
            url : "/urlpattern",
            type : "post",
            success : function(data) {
                alert("success");
            } 
        });
    }
</script>
<form method="POST">
    <button name="data" type="button" onclick="getData()">Click</button>
</form>

この答えは非常に複雑です。ましてや、他のより単純な方法を使用できるOPの問題を防ぐために外部ライブラリを必要とすることは言うまでもありません。
Zac
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.