20

「this」オブジェクトをパラメーターとして渡す eventHandler を作成したいと考えています。私はこれを試しました

 <select id="customer" onchange="custChange(this);">

それは正常に動作し、変更時に呼び出されたdomオブジェクトを取得します。

しかし、私の理解では、最初の引数は以下のようなイベントハンドラーメソッドで「イベント」(「this」オブジェクトではない) として期待されるため、これは機能しないはずです。

  <select id="customer" onchange="custChange(event);">

名前が正しい場合、または最初の引数が常にイベント オブジェクトと見なされる場合、eventHandler メソッドで任意の引数 (this または event) を渡すことができますか?

4

5 に答える 5

13

あなたが定義custChangeし、さらに重要なことに、あなたはそれを呼んでいます。したがって、どの引数をどの順序で受け入れるかを自分で決めることができます。自分で呼び出さない関数についてのみ、引数の順序に注意する必要があります。

しかし、イベントハンドラをバインドする他の方法custChangeと互換性があるように定義したい場合、つまり

function custChange(event) {
    // `this` refers to the DOM element
}

それからあなたはそれを呼び出すことができます

custChange.call(this, event);
于 2013-08-08T07:40:14.343 に答える
8

私はテストをしました。

function change(){
    console.info( arguments );
}

<select name="" id="" onchange="change( this, event )">
    <option value="1">A</option>
    <option value="2">B</option>
    <option value="3">C</option>
</select>

<select name="" id="" onchange="change( event, this )">
    <option value="1">A</option>
    <option value="2">B</option>
    <option value="3">C</option>
</select>

<select name="" id="" onchange="change( this, e )">
    <option value="1">A</option>
    <option value="2">B</option>
    <option value="3">C</option>
</select>

上記の select を 1 つずつ操作し、以下のコンソール情報を取得しました。

  • [選択、イベント]
  • [イベント、選択]
  • Uncaught ReferenceError: e が定義されていません

したがって、結果から、ページ呼び出しで正しい単語を渡す必要があり、その位置を変更できるという結論に達しました。

于 2013-08-08T07:35:43.930 に答える
3

最初の引数は常にイベントになります。

[編集] 必要な任意の引数を指定してハンドラーを呼び出すことができ、呼び出されたときにeventおよびthisオブジェクトが使用可能になります。eventイベント オブジェクトを参照し、イベントthisを発生させる dom オブジェクトを参照します。[/編集]

ただし、ハンドラーでevent.currentTargetは、イベントを発生させたオブジェクトにリンクします。

<script>
    function custChange(event) {
        // event.currentTarget = select element
    }
</script>
<select id="customer" onchange="custChange(event);">
于 2013-08-08T06:49:51.213 に答える
0

目立たないjavaScriptに従ってそれを行うことができます:

$("#customer").on("change", function () {
    ... and here you have $(this) object linked to 'customer' select
});
于 2013-08-08T06:49:49.903 に答える