3

次のコードがあります。

function showAddrBox() {
    var prompt = document.getElementById('addr_prompt');
    prompt.style.display = 'block';
    document.generic_form.address.style.display = 'block';
    document.generic_form.onsubmit = validateAddrForm;
}

function hideAddrBox() {
    var prompt = document.getElementById('addr_prompt');
    prompt.style.display = 'none';
    document.generic_form.address.style.display = 'none';
    document.generic_form.onsubmit = null;
}

onSubmit問題は、保存したい追加機能が添付されている場合があることです。onSubmitで設定するだけでなく、個々の関数をイベントに追加および削除できるようにしたいonsubmit =。つまり、次のようなことを達成する方法が必要です。

document.form.onsubmit += function;
document.form.onsubmit -= function;

何か案は?

4

4 に答える 4

7

Quirksmode には、高度なイベント登録に関する素晴らしい記事があります。

addEventListener短い形式: (attachEvent以前のバージョンの IE では)を使用して、複数のイベントをバインドできます。

if (someform.addEventListener) {
  someform.addEventListener('submit', somefunc, false);
} else {
  someform.attachEvent('onsubmit', somefunc);
}

それらを削除するにはremoveEventListenerdetachEventそれぞれ と を使用できます。


addEventListenerと を繰り返し入力するとすぐにイライラするのでattachEvent、イベントをバインドするための一般的なコードを作成することを検討するかもしれません。幸いなことに、他のプログラマーも同じ考えを持っており、イベント管理をエレガントに処理する多くのライブラリが利用可能です。jQueryイベントのバインドは次のように簡単であるため、ライブラリが選択される傾向があります。

$('#formid').submit(somefunc);

一般的なイベント バインディング メソッドは次のとおりです。

$('#formid').on('submit', somefunc);

バインドを解除するには、次を使用できます。

$('#formid').off('submit', somefunc);

これはすべてjQuery APIで十分に文書化されていますが。

于 2012-01-24T04:58:55.977 に答える
6

とを使用element.addEventListener("eventName", callbackFunction, false)element.removeEventListener("eventName", callbackFunction)ます。

ここで、eventNameは、「オン」のないハンドラーの名前です。したがって、onsubmitはsubmitになります。

2つの関数のドキュメントについては、以下を参照してください。

于 2012-01-24T04:55:25.840 に答える
0

私がすることは、残りの関数を調整し、いつ何をするかについてロジックを実行するフォーム上に1つのonSubmit関数を配置することです。その関数の実行の最後に、送信を続行する場合はtrueを返し、そうでない場合はfalseを返すことができます。

于 2012-01-24T04:53:35.747 に答える
0

以下のようなフォームに対して 2 つ以上の関数を指定できます。

<form name="formaname" onsubmit="function1(),function2()">

onsubmit の詳細

于 2012-01-24T04:59:58.693 に答える