1

「イベント」を追加するまで機能しなかったjqueryのクリック関数がありました(以下を参照)。

イベントはいつ必要ですか?このドキュメントはそれを使用していません: http://api.jquery.com/click/

動作しませんでした:

$(document).ready(function () {
        $('#div a').click(function () {
            event.preventDefault();
            $('#menu,#wrapper').toggleClass('open');
        });
    })

作品:

$(document).ready(function () {
        $('#div a').click(function (event) {
            event.preventDefault();
            $('#menu,#wrapper').toggleClass('open');
        });
    })
4

5 に答える 5

3

リンク先のドキュメントは、click関数がeventTypeでバインドする"click"ためのショートカットであることを正確に示しています。このドキュメントの抜粋は次のとおりです。

.bind(eventType [、eventData]、handler(eventObject))

bind関数のプロトタイプは、提供するコールバックが、コード内のイベントであるをhandler受け取ることを示しています。eventObject

このイベントはjQueryでラップされたイベントであり、呼び出す関数がありますpreventDefault

だからこの行

event.preventDefault();

イベントを定義する必要があります。function(event)関数の宣言を書き込むと、ローカル変数イベントが宣言されます。その値はeventObject、j​​Queryによって指定されたものの1つになります。

または、変数を定義したくない場合は、次のようにすることができます。

$(document).ready(function () {
    $('#div a').click(function () {
        $('#menu,#wrapper').toggleClass('open');
        return false; // this prevents default handling and also stops propagation
    });
})
于 2012-12-11T15:33:53.480 に答える
2

動作しないコードスニペットでは、event宣言していないか、関数のパラメーターとして受け入れていないため、未定義です。

$(element).click(function(event){ // "event" is optional, but required if you intend to use it
    event.preventDefault();
});

イベントオブジェクトを使用する場合にのみ、イベントオブジェクトパラメータを渡す必要があります。たとえば、コードのデフォルトアクションを防ぐために使用したり、イベントの発生元の要素などの情報を取得したりする場合に限ります。

また、イベントの代わりに任意の名前を使用でき、それでも機能することにも注意してください。

$(element).click(function(foobar){
    foobar.preventDefault();
    alert("The id of the clicked element is: " + foobar.target.id);
});

よくわからない場合は、とにかくそれを含めてください。何も害はありません。

于 2012-12-11T15:53:26.537 に答える
2

ご指摘のとおり、jquery のドキュメントではメソッドとそのシグネチャについて説明していますが、eventObject の使用例は示していません。

.click( handler(eventObject) )

handler(eventObject) A function to execute each time the event is triggered.

ハンドラ(eventObject)の代わりに無名関数を提供しています:

function() {
// do something
}

ただし、関数のシグネチャには、操作できる eventObject が含まれています

function(event) {
// do something with event, such as event.preventDefault();
}

理解に役立つ場合は、名前付き関数を呼び出すこともできることに注意してください。

$(document).ready(function () {
        $('#div a').click(handleSomeClick);
    })

function handleSomeClick(event) {
    event.preventDefault();
    $('#menu,#wrapper').toggleClass('open');
}

このオブジェクトで他に何ができるかを確認するには、console.log(event) を実行すると便利です。

于 2012-12-11T15:46:23.097 に答える
2

イベントが発生すると、リスナー関数にイベント オブジェクトclickが渡されます。最初の例では、関数はパラメーターを受け入れず、それ以外の場合は を定義しないeventため、eventinevent.preventDefaultは定義されません。

しかし、少しバックアップしましょう。

JavaScript では、イベント リスナー関数が起動されると、最初の引数としてイベント オブジェクトが渡されます。このイベント オブジェクトには、発生したばかりのイベントに関する詳細な情報が含まれています。たとえば、どのキーがkeydownイベントに対して押されたか、どのマウス ボタン (左、右、中央) がclickイベントに対して使用されたかなどです。

event.preventDefaultイベント オブジェクトには、デフォルトのブラウザ動作を停止するなど、イベントを制御するための特別な関数もいくつかあります。たとえば、 (ここで行うように)clickリスナーを link<a>要素にバインドする場合、ブラウザが実際にリンクをたどらないようにすることができます。これは、クリックされたリンクに対するデフォルトのブラウザの反応です。

具体的には、jQuery に関して言えば、イベント オブジェクトはクロス ブラウザーでの使用のために標準化されていますが、その他の点では、プレーンな JS について上で述べたことはすべて適用されます。jQuery のドキュメントでjQuery イベント オブジェクトの仕様を確認できます。

tl;dr:関数で を使用できるようにしますevent.preventDefault。これを行うには、イベント リスナー関数でイベントからイベント オブジェクトを受け取り、その.preventDefaultメソッドを呼び出す必要があります。

于 2012-12-11T15:48:26.423 に答える
0

使用するため event event.preventDefault();、パラメーターとして渡す必要がありますが、通常はオプションです

于 2012-12-11T16:07:43.813 に答える