3

送信ボタンをクリックしてjs関数を呼び出した後、入力テキストが電子メール形式であることを確認しようとしています。私が遭遇する最初の問題は、いくつかのテストの後、呼び出された関数に入らないことがわかったということです。この後、すべて問題ないと思いますが、念のため、数分以内に2つのほぼ同じ質問を投稿しないように、最も重要な部分を含めてください。要約すると、次を確認する必要があります。

次に、すべてを変更しない場合は、問題が見つかったかどうかを通知する必要があります

私は自分の言いたいことを言ったと思います. そうでない場合は、もう一度説明してみてください..

 <input type="text" name="email" id="email">
    <input type="submit"  onclick=" proceed()"/>
<script>
    proceed(){
        var email= document.getElementById('email').value;
        var problems;
        if (email == ""){
            problems = "Empty variable \n";

        }

        var noat = true;
        for (int i=0; email.length; i++){
            if (email.charAt(i) == "@"){  //Compare each character
                noat=false;
                break;
            }
        }

        if (email=="" || noat=true){
            problems += "No @ \n"
            alert(problems);                        
        }
    }

</script>
4

4 に答える 4

5
<form onsubmit="return proceed();">
    <input type="text" name="email" id="email">
    <input type="submit" />
</form>

<script>
    function proceed() {
        var email = document.getElementById('email').value;
        var problems = "";

        if (email == "") {
            problems = "Empty variable \n";
        }

        var noat = false;
        if (email.indexOf("@") == -1) noat = true;

        //    for (int i=0; i< email.length; i++){
        //    if (email.charAt(i) == "@"){  //Compare each character
        //       noat=false;
        //       break;
        //}

        if (email == "" || noat == true) {
            problems += "No @ \n";
            alert(problems);
        }

        if (problems == "")
            return true;
        else
            return false;
    }
</script>
于 2013-10-31T01:21:28.887 に答える
2

onclick を使用する代わりに、onsubmit を使用し、@ 記号の各文字を比較する代わりに、メール テストの正規表現を使用する必要があると思います。

それらはオンラインでたくさんありますが、グーグルだけです。

正規表現のサンプル

于 2013-10-31T01:25:33.950 に答える
1

この質問はすでに回答済みとしてマークされていますが、質問からいくつかの重要なポイント/学習ポイントがあると感じているので、以下に私の入力を追加しました.

  1. 現在、質問のコードはproceed() { ... }. function proceed() { ... }適切な関数宣言にするために、これを に変更する必要があります
  2. 変数が使用されているスコープの先頭で変数を定義するのは良い習慣です。これで、emailproblemsvars が並んで宣言されましたが、これで問題ありません。ただし、var noatそれ自体はすべて数行下にあります。他の宣言に移動すると、コードの読者がこの関数で使用される変数を理解するのに役立ちます
  3. email関数の 4 行目で、 が空の文字列かどうかを確認します。そうであれば、problems変数を設定します。でも、空いていればその場で止められます。return problems;この機能をそのまま使用できます。
  4. すでに指摘されていますがemail.indexOf("@")、ネイティブ JS メソッドを使用して、文字列イテレータで行っていることを実行します。
  5. for(int i=0; ...)おかしいと思ったint i =0ので、ブラウザの JavaScript コンソールに入力してみました。エラーが発生しました。for(var i = 0; ...)これを正しい構文に変更できます。
  6. 関数の後半で、 email が再び空かどうかを尋ねます: if(email == ""). しかし、私たちはすでにこの質問をしており、それが真であれば関数を終了していたでしょう。@文字列が空の場合、文字列に記号を含めることはできません。
  7. これは前にも述べましたが、おそらく正規表現を使用してメールをチェックしたいと思うでしょう。
  8. 次に がありnoat = trueます。割り当ての結果が true であるため、これは実際には常に true と評価されます。の値noatを true に設定しており、javascript は「クールな素晴らしいものは私には似合います」のようなものです。noat最初に true または false に設定されていたかどうかはチェックしません。

これらの推奨事項のほとんどに従うjsfiddleを作成してテストしました。また、コードをより簡潔にして同様の目標を達成する方法も示します。これがあまりにも説教的/すべてを知っていると思われる場合は申し訳ありませんが、私は絶対にそうではありません. この質問は私の興味をそそり、私は答えなければなりませんでした!

window.proceed = function () {
    var email = document.getElementById('email').value;
    if (email == "") {
        alert("Empty variable \n");
    } else if (email.indexOf("@") == -1) {
        alert("No @ \n");
    } else return true; 
}

jsfiddle

于 2013-10-31T02:47:19.527 に答える
1

自分でこれを書こうとしていたのですが、たまたま 4 時間前に見つけてしまいました。これはあなたを助けるでしょう。

<script>
function proceed()
{
var email = document.getElementById("email").value;
var atpos = email.indexOf("@");
var dotpos = email.lastIndexOf(".");
if (atpos < 1 || dotpos < atpos+2 || dotpos+2 >= email.length)
  {
  alert("Not a valid e-mail address");
  return false;
  }
};
</script>

<form onsubmit="proceed();">
    <input type="text" name="email" id="email" />
    <input type="submit" />
</form>

あなたのコードには多くのタイプミスがありました。書くときは時間をかけてください。これはw3schoolsからです

于 2013-10-31T01:46:08.913 に答える