2

私はしばらくの間、この質問に対する答えを探していましたが、運がありませんでした。答えやすい人もいるかもしれません。

このタグでは:

<form method="post" action="" class="jcart" id="somethinghere" onsubmit="return validate(this)">

「this」キーワードは何を表していますか?

たとえば、別の JavaScript 関数内からこのフォームの「検証」関数を呼び出したい場合、どうすればよいでしょうか?

私はそれが次のようなものであることを知っています:

<script type='text/javascript'>
function MyTest(){
validate(???);
}
</script>

しかし、検証関数の呼び出しの中に何を入れるべきかわかりません。

編集

これが私がやろうとしていることです。

Ajax 経由で送信されるフォームがあります。また、それにはいくつかの検証もあります。ただし、検証スクリプトは通常、フォームが送信されるときに呼び出されます。ただし、Ajax 関数は既に送信ボタンの「クリック」を取得してデータを送信しているため、検証をトリガーする方法でフォームが「送信」されることはありません。

このコードは、Ajax 経由でフォームを送信する役割を果たします。

    $('.jcart').submit(function(e) {
        add($(this));
        e.preventDefault();
    });

そのため、そこから検証関数を実行し、検証に合格した場合にのみ add() 関数を呼び出すことができるようにしたいと考えています。しかし、フォームを参照して onsubmit 呼び出しの「this」と同じ要素参照を取得する方法がわからないため、ここから関数を呼び出す方法がわかりません。

編集2

私はこれを試しました:

$('.jcart').submit(function(e) {
    if(validate(document.getElementById("somethinghere"))){
        alert("validated");
        add($(this));
        e.preventDefault();
    }
    else {
        alert("not validated");
        e.preventDefault();
    }
});

しかし、「検証が定義されていません」というエラーが表示されます。

また、上記のコードはドキュメントの最後にロードされ、validate 関数を含むファイルが最初に呼び出されます。したがって、ここで呼び出しようとすると、検証関数が使用可能になると考えていたでしょう。既にロードされているはずだからです。

4

1 に答える 1

2

その場合this、 はイベントが発生した要素、つまりフォーム要素を表します。

他の場所から呼び出したいが、同じフォームをvalidate()検証する場合は、フォームへの参照を取得して渡します。.getElementByid()

function MyTest(){
  validate(document.getElementById("somethinghere"));
}

(「somethinghere」はフォームの ID です。)

編集:あなたの編集について:

「Ajax 経由でフォームを送信するコードを見つけました。」

    $('.jcart').submit(function(e) {
        add($(this));
        e.preventDefault();
    });

がAjax 経由でフォームを送信する責任がありますか? クラス「jcart」を使用してフォームに送信ハンドラーを作成しているように見えますが、最初に表示したフォームにはそのクラスがありません。add()表示されていない関数が「somethinghere」フォームを送信しない限り?

「しかし、「検証が定義されていません」というエラーが表示されます。」

インラインが同じページでsubmit="return validate(this);"機能する場合は、グローバル関数にする必要があるため、ページのどこからでも呼び出すことができます。これがうまくいかない場合は、あなたが示した以上のことがあなたのコードで起こっているに違いありません.validate()

于 2012-08-18T07:42:42.207 に答える