0

これに似た Javascript オブジェクトがあります。

var MyClass;
MyClass = (function() {

    // private
    var $elems;

    // constructor
    function MyClass(selector) {
        $elems = $(selector);
        $elems.change(myEventHandler(e));
    }

    // event handler
    function myEventHandler(e) {
        var isSelected = ($(e.target).attr('checked') == 'checked');
        if (isSelected) {
            alert('You selected me');
        }
    }

    return MyClass;

})();

このクラスを html ドキュメントで次のように呼び出します。

$(function(){ 

    var myClass; 
    myClass = new MyClass(".MySelector");

});

エラーが表示されます:

Uncaught ReferenceError: e is not defined MyClassJsFile.js:17
    MyClass MyClassJsFile.js:17
    (anonymous function) Step3:36
    f.extend._Deferred.e.resolveWith jquery.min.js:16
    e.extend.ready jquery.min.js:16
    c.addEventListener.B

コンストラクターの次の行で、イベント オブジェクトをイベント ハンドラーに渡していると思いました。

$elems.change(myEventHandler(e));

この場合、イベントを正しく渡すにはどうすればよいですか?

4

2 に答える 2

4

未定義の変数を使用してイベント ハンドラーを呼び出しています。イベント ハンドラーは関数なので、関数参照を呼び出さずに渡すだけです。

$elems.change(myEventHandler);
于 2012-08-27T21:55:18.220 に答える
2

以下を使用できます。

$elems.change(myEventHandler);  // or $elems.on('change', myEventHandler) in 1.7+

適切なハンドラーへの参照を渡すだけです。そのままで、ハンドラーをすぐに呼び出してから、(存在しない) 戻り値をchangeハンドラーにバインドしようとしています。

ところで、選択したボックスのチェックは複雑すぎます。あなたはただ書くことができるはずです:

var isSelected = this.checked;

thisjQuery が変更された実際の DOM 要素に設定されることに基づいて、そのブール値checkedプロパティをすぐに確認できます。

于 2012-08-27T21:57:26.400 に答える