送信ボタンのonclickイベントでフォームの送信をキャンセルするにはどうすればよいですか?


99

ASP.net Webアプリケーションに取り組んでいます。

送信ボタン付きのフォームがあります。送信ボタンのコードはのようになります<input type='submit' value='submit request' onclick='btnClick();'>

私は次のようなものを書きたいです:

function btnClick() {
    if (!validData())
        cancelFormSubmission();
}

どうすればよいですか?


痛い、これは私の頭を痛めている。いくつかの異なるsubmit入力があります。このページでサーバー側のコントロールを使用してみます。
ビビアン川

回答:


183

あなたはやっておく方が良いです...

<form onsubmit="return isValidForm()" />

isValidForm()返された場合false、フォームは送信されません。

また、イベントハンドラーをインラインから移動する必要があります。

document.getElementById('my-form').onsubmit = function() {
    return isValidForm();
};

ニース、それは私が得ることができないようですonsubmit私はASP.netを使用していたときに仕事に理由asp.netラップそれ自身の形...でEVERYTHING
ヴィヴィアン・リバー

5
彼の2番目の提案を使用できます。インラインJavaScriptはとにかく悪魔です。
Stephen

3
ASP.NET Webフォームを使用している場合(ヒント:しないでください)、他のフォームを含めようとしないでください。それらは単に互換性がありません。ASP.NET MVCでは慣用的なマークアップを使用してWebアプリを作成できると聞きました。
Quentin

@David、他のフォームの使用がASP.net Webフォームと互換性がない場合、サーバー側のコントロールのみを使用する必要がありますか?
ビビアン川

2
stackoverflow.com/a/23604664/1639385のように、他の誰かが正確に回答しました。偶然だったと思います。
Ulysses Alves、2015年

43

入力を次のように変更します。

<input type='submit' value='submit request' onclick='return btnClick();'>

関数でfalseを返します

function btnClick() {
    if (!validData())
        return false;
}

13

変える必要がある

onclick='btnClick();'

onclick='return btnClick();'

そして

cancelFormSubmission();

return false;

そうは言っても、優れたイベント処理APIを備えたライブラリ(YUIやjQueryなど)を備えた控えめなJSを優先して、本質的なイベント属性を回避し、本当に重要なイベント(つまり、フォームの送信イベント)に結び付けようと思いますボタンのクリックイベント)。


2
onclickを使用すると、ユーザーはEnterキーを押してチェックをバイパスできます。
Cfreak

7

onsubmitasp.netでは動作しない場合があります。

とても簡単な方法で解決しました。

そのような形があれば

<form method="post" name="setting-form" >
   <input type="text" id="UserName" name="UserName" value="" 
      placeholder="user name" >
   <input type="password" id="Password" name="password" value="" placeholder="password" >
   <div id="remember" class="checkbox">
    <label>remember me</label>
    <asp:CheckBox ID="RememberMe" runat="server" />
   </div>
   <input type="submit" value="login" id="login-btn"/>
</form>

これで、フォームポストバックの前にそのイベントを取得してキャッチし、ポストバックを停止して、このjqueryを使用して必要なすべてのajaxを実行できます。

$(document).ready(function () {
            $("#login-btn").click(function (event) {
                event.preventDefault();
                alert("do what ever you want");
            });
 });

5

タイプをからsubmitに変更する必要がありますbutton

<input type='button' value='submit request'>

の代わりに

<input type='submit' value='submit request'>

次に、JavaScriptでボタンの名前を取得し、それに必要なアクションを関連付けます

var btn = document.forms["frm_name"].elements["btn_name"];
btn.onclick = function(){...};

それが役に立てば幸いです。


4

あなたはする必要がありますreturn false;

<input type='submit' value='submit request' onclick='return btnClick();' />

function btnClick() {
    return validData();
}

1

送信ボタンを通常のボタンに変更し、クリックテストで、検証テストに合格したフォームを送信してみませんか?

例えば

<input type='button' value='submit request' onclick='btnClick();'>

function btnClick() { 
    if (validData()) 
        document.myform.submit();
} 

1
Enterキーを押すと、チェックがバイパスされます。onSubmitを使用する
Cfreak

JavaScriptが利用できない場合は、まったく機能しません。< ahref="icant.co.uk/articles/pragmatic-progressive-enhancement/…機能するものについて< /a > 。–
Quentin

1

あなたが必要onSubmitです。それonClick以外の場合は、Enterキーを押すだけで検証がバイパスされます。キャンセルも。falseを返す必要があります。これがコードです:

<form onSubmit="return btnClick()">
<input type='submit' value='submit request'>

function btnClick() {
    if (!validData()) return false;
}

編集 onSubmitはformタグに属しています。


これは機能しません。データが有効な場合は、trueを返しません。trueを返す; btnClick()関数の終わり
NickSoft

1

これは単純で、単にfalseを返します。

以下のコードは、jqueryを使用して送信ボタンのonclick内に配置されます。

if(conditionsNotmet)
{
return false;
}

0

使用する onclick='return btnClick();'

そして

function btnClick() {
    return validData();
}

2
Enterキーを押すと、チェックがバイパスされます。onSubmitを使用する
Cfreak

0
function btnClick() {
    return validData();
}

1
これを機能させるには、これ以上のことを行う必要があります。functinoをtrueまたはfalseに戻してみましたが、何の違いもないようです。
ビビアン川

1
彼の答えは正しいです。賛成。入力タグでも返す必要があります
Cfreak

1
また、他のコントロールが同じ要素で同じイベントを監視する場合に備えて、ev.preventDefault()またはev.returnValue = falseを使用して、デフォルトの動作をキャンセルしますが、イベントのバブリングを防ぎません。return falseイベントのバブリングを停止し、デフォルトのアクションキャンセルする場合にのみ使用してください。この記事を参照してください
KlemenSlavič2010年

イベントハンドラー自体でそれを返す必要があることは、回答から欠落していた非常に主要な情報です。それがなければ、答えは不完全であり、賛成票を投じるだけの価値はありません。
Quentin

0
<input type='button' onclick='buttonClick()' />

<script>
function buttonClick(){
    //Validate Here
    document.getElementsByTagName('form')[0].submit();
}
</script>

2
有用な答えを得るには、この反応を拡張する必要があります。これが質問に対する答えである理由を説明してください。
Jeroen Heier

0

JQueryを使用するとさらに簡単です:Asp.Net MVCおよびAsp.Coreで動作します

<script>
    $('#btnSubmit').on('click', function () {

        if (ValidData) {
            return true;   //submit the form
        }
        else {
            return false;  //cancel the submit
        }
    });
</script>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.