9

フォームの送信をキャンセルしようとしているときに、少し問題が発生しています。私はこのチュートリアルに従っています (ログインスクリプトを作成していませんが)、彼にとってはうまくいっているようです。

これが私のフォームです:

    <form action="index.php" method="post" name="pForm">
        <textarea name="comment" onclick="if(this.value == 'skriv här...') this.value='';" onblur="if(this.value.length == 0) this.value='skriv här...';">skriv här...</textarea>
        <input class="submit" type="submit" value="Publicera!" name="submit" />
    </form>

そして、ここにjqueryがあります:

$(document).ready(function() {
    $('form[name=pForm]').submit(function(){

        return false;

    });
});

私はすでにヘッダーにjQueryをインポートしており、それが機能していることを知っています。最初は時代遅れかもしれないと思っていましたが、実際には「ちょうど」1年前です。

それで、誰かが何が悪いのか分かりますか?

前もって感謝します。

編集:私が読んだことから、送信を中止する最も簡単で適切な方法はfalse を返すことですか? しかし、私はそれを機能させることができないようです。フォーラムを検索したところ、役立つスレッドがいくつか見つかりましたが、実際には機能していません。何かを台無しにしているに違いない。

4

12 に答える 12

13

event.preventDefaultを使用してみてください

$(document).ready(function(event) {
    $('form[name=pForm]').submit(function(event){
        event.preventDefault();
        //add stuff here
    });
});
于 2010-08-25T18:32:35.583 に答える
9

みんな反応ありがとう!私の友人は私に追加するように勧めました

onsubmit="return(false)

フォーム上。それはうまくいきますが、うまくいくnot-inline-javascriptのトリックを知りたいです。

于 2010-08-25T18:38:06.710 に答える
4

「「return false」の前のアラートが表示されない」ことを示しています。

jQuery を使用する場合、submit 要素の ID または名前を「submit」にすることはできません。そうである場合、submit イベントは発生しません。

于 2012-09-22T18:45:49.400 に答える
2

name の値は引用符で囲む必要があります。これを試して:

$(document).ready(function() {
    $("form[name='pForm']").submit(function(){
        return false;
    });
});
于 2010-08-25T18:33:55.753 に答える
2

この(未回答、日付も)質問に対する私のささやかな貢献です。私はこの問題を何度か実行しましたが、常に同じ解決策を使用しています。

使用しないでください

<input name="submit" />

一緒に

$('form').submit(function(){...});

これにより、間違った要素/アイテムが起動され、エラーも警告も発生しません。したがって、送信ボタンに別の名前を付けるだけで、魔法のようにすべてが再び機能し始めます。

于 2012-10-21T18:27:54.663 に答える
2

それはうまくいくはずです。もっと問題がある可能性があります。残念ながら、質問のコードはSSCCEフレーバーではないため、根本的な原因を特定するのは困難です。jQuery ライブラリをまったくインポートしていない可能性があります。または、jQuery ライブラリをインポート$(document).ready() する前に呼び出しました。または、競合している別の JS ライブラリがあり$()ます。または、実際のフォームに目的の名前がありません。など..など.

開始するには、ここに十分な価値のある SSCCE があります。コピーして貼り付けて実行するだけです。

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>SO question 3569072</title>
        <script src="http://code.jquery.com/jquery-latest.min.js"></script>
        <script>
            $(document).ready(function() {
                $('form[name=pForm]').submit(function() {
                    alert('Submit blocked!');
                    return false;
                });
            });
        </script>
    </head>
    <body>
        <form action="index.php" method="post" name="pForm">
            <textarea name="comment" onclick="if(this.value == 'skriv här...') this.value='';" onblur="if(this.value.length == 0) this.value='skriv här...';">skriv här...</textarea>
            <input class="submit" type="submit" value="Publicera!" name="submit" />
        </form>
    </body>
</html>

それが機能する場合 (少なくとも、ここでは機能します。アラートが表示され、フォームがまったく送信されません)、独自のコードと比較し、独自のコードをこのフレーバーに切り詰めて、違いをよりよく見つけられるようにしてください。 (したがって、あなたの間違い)。

とにかく、私の意見では、いくつかの基本的/自明なjQuery(およびできればJavaScriptも)のチュートリアルを自分自身で習得して、内部で何が起こっているかをよりよく理解し、Firebugなどのツールの使用方法を学ぶことは価値があります。

于 2010-08-25T19:03:28.580 に答える
2

私もこの問題を抱えていました.私のコード(うまくいかなかった)は次のようなものでした:

$('#upload_form').submit(function(){ before_submit('argument') });

そして、「before_submit」関数内で、フォームの送信を停止するために「falseを返す」必要がありました。

function before_submit() {

.........................................................
return false;
}

イベントハンドラー関数をフォームにバインドするときに「return」を入力すると、機能しました。

$('#upload_form').submit(function(){ return before_submit('argument') });

送信イベントに関連付けられた関数は false を返す必要があります (私の場合は無名関数)。だから...これは、この問題の1つの原因に対する1つの解決策です

于 2011-04-16T17:18:07.503 に答える
0

私は同様の問題に遭遇しました。検証前にフォームのアクションとメソッドを削除し、検証後に再度追加することで解決しました。これが私が書いたバリデータです:

var Validator = function (formSelector) {
    this.formSelector = formSelector;
//  $(formSelector).submit(function() {return false;});
        this.Action = $(formSelector).attr("action");
        this.Method = $(formSelector).attr("method");
    $(formSelector).attr("action",function(){return ""}).attr("method",function(){return ""});  
        var donotsubmit = false;
        var notjustcheckbox = false;
        var checknotchecked = false;
    this.Required = new Array();
    this.Email = new Array();
    this.validate = function () {
        this.form = $(this.formSelector);
        var i = 0;
        for (i in this.Required){
            $(this.Required[i]).attr("value", function(index,attr){
                // Check on checkboxes...   
                if (this.getAttribute("type") == "checkbox"){
                    if (this.checked == false){ 
                        checknotchecked = true;
                        donotsubmit = true;
                    } else {
                    }       
                } else {    
                    if (attr == "" || attr == undefined){   
                        this.style.border = "1px solid red";
                        notjustcheckbox = true;
                        donotsubmit = true;     
                    } else {
                        this.style.border = "1px solid green";
                    }
                }
            });
        }
        i = 0;
        for (i in this.Email){
            $(this.Email[i]).attr("value", function(index,email){
                var filter=/^([\w-]+(?:\.[\w-]+)*)@((?:[\w-]+\.)*\w[\w-]{0,66})\.([a-z]{2,6}(?:\.[a-z]{2})?)$/i ;
                if (filter.test(email) == true || filter.test(email) == "true") {
                    this.style.border = "1px solid green";
                } else if (filter.test(email) == false) {
                    donotsubmit = true;
                    notjustcheckbox = true;
                    this.style.border = "1px solid red";
                }
            });
        }
        if (donotsubmit == true){
            if (checknotchecked == true && notjustcheckbox == true){    
                alert("Please correct the fields in red and check the required checkboxes");
            } else if (checknotchecked == true && notjustcheckbox == false){
                alert("Please check the required checkboxes");
            } else {
                alert("Please correct the fields in red");
            }
            checknotchecked = false;
            notjustcheckbox = false;
            donotsubmit = false;
        } else {
            $(formSelector).attr({action : ''+this.Action+''});
            $(formSelector).attr({method : ''+this.Method+''});
            $(formSelector).submit();   
        }
        return true;
    };
};

次のように実装できます。

$(document).ready(function(){
    var myForm = new Validator("#formId");
        myForm.Required = new Array("input.lightborder");
                myForm.Email = new Array("#email");
                $("#form-submit-button-id").click(function(){
                    myForm.validate();
                });
});

必須フィールドに CSS セレクターを追加できます。電子メール用のものは一意である必要があります。

于 2010-08-25T18:33:12.867 に答える
0

私はこれと同じ問題を抱えていましたが、それは Rails と:remote => trueフォームの使用にかかっていました。自分の関数が and を使用して送信プロセスを停止しようとしているときに、Rails jQuery ドライバーが ajax によってフォームを送信していましreturn falseevent.preventDefault()

そのため、独自の JavaScript に干渉するフレームワークとデフォルト アクションに注意してください。return false動作するはずです:)

于 2012-10-30T23:26:31.287 に答える