Mam obiekt JavaScript, który jest podobny do tego:

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;

})();

Nazywam tę klasę w moim dysku HTML w ten sposób:

$(function(){ 

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

});

Co daje mi błąd:

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

Myślałem, że przekazywając obiekt zdarzenia do obsługi imprezy w tej linii konstruktora:

$elems.change(myEventHandler(e));

Jak prawidłowo zdać wydarzenie?

0
quakkels 28 sierpień 2012, 01:52

2 odpowiedzi

Najlepsza odpowiedź

Możesz użyć:

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

Po prostu przekazać odniesienie do właściwego przewodnika. Jak już jesteś wywołując Natychmiast, a następnie próbując powiązać (nieistniejące) wartość powrotu do obsługi {X0}}.

Sprawdzanie wybranego pudełka jest nadmiernie skomplikowane, BTW. Powinieneś być w stanie tylko pisać:

var isSelected = this.checked;

Na podstawie tego, że jQuery ustawi this, aby był faktycznym elementem Domu, który się zmienił, a można natychmiast sprawdzić jego właściwość Boolean {X1}}.

2
Alnitak 27 sierpień 2012, 22:04

Dzwonisz do przewodnika o zdarzeniu z niezdefiniowaną zmienną. Pełnomocniki zdarzeń są funkcjami, więc po prostu zdaj się odnieść się do funkcji bez dzwonienia:

$elems.change(myEventHandler);
4
Daff 27 sierpień 2012, 21:55