2012-03-19 16 views
5

Grałem około z knockout.js z jQuery i jestem bardzo nowy knockout.jsOdzyskiwanie elementu z jQuery wewnątrz imprezy pucharowej

moim przykładzie kodu i kod jest tutaj: http://jsfiddle.net/Ninjanoel/ADYN6/

Zasadniczo próbuję utworzyć ekran wprowadzania liczb loterii jako test mojej wiedzy, a teraz próbuję zweryfikować dane wejściowe w polu tekstowym, a następnie zastosować efekty specjalne do pola wprowadzania, jeśli [onBlur], tekst pole jest nieprawidłowe.

Mam "LotteryApp", z obserwowalną tablicą "Lines", z normalną tablicą [5] obserwowalnych ko, które służą jako moje dane wejściowe lub "Skrzynki numeryczne". Używam szablonu, aby wyświetlić każdą "Linię" i dodatkowy szablon wewnątrz, aby renderować "Skrzynki".

Chciałbym nazwać wtyczkę jQuery 'color fade' [kolor czerwony na bg] w polu tekstowym, jeśli dane wejściowe nie są poprawne. Ale w funkcję „onblur” stworzyłem, nie mogę znaleźć niczego w żadnym z argumentów przekazanych do funkcji, aby pomóc mi nazwać coś takiego myTextBox = jQuery(arguments.something), tak, że mogę zrobić coś takiego jQuery(myTextBox).colourFade()

<input type="text" data-bind="value:n, event:{blur: $parent.onBlur }, uniqueName:true, disable: $parent.isLD" class="lotteryNumber" maxlength="2"/> 

jest kod w moim najgłębszym szablonie obsługującym moduł onBlur.

self.onBlur = function()... 

to funkcja, którą chcę wywołać w zdarzeniu "rozmycie".

Mam świadomość, że jeśli używam niestandardowego wiązania, np. ko.bindingHandlers.myBinding następnie "element" jest przekazywany bezpośrednio do wywołań "update" i "init", które mogę następnie użyć do wywołania jQuery (element) .colourFade(), ale jest to bardziej ćwiczenie w zrozumieniu, jak uzyskać dostęp do elementu przy użyciu standardowych wiązań zdarzeń, ponieważ mogę sobie wyobrazić, że będę go często potrzebował i nie chcę robić WSZYSTKIEGO w niestandardowym powiązaniu, a także z opcjami "init" i "update" w niestandardowym powiązaniu (według mojej wiedzy) , Nie sądzę, że te będą wystarczające (np. Co z "keyup"?), A mimo to niestandardowe wiązania wydają się być oparte na samym pliku ko.observable, a nie na samym zdarzeniu.

Podsumowanie:

podczas korzystania data-bind="event : {blur : myMethod}", jak mogę, wewnątrz myModel.myMethod, chwyć elementu HTML, który utworzył wydarzenie.

Odpowiedz

8

JQuery event obiekt jest drugim argumentem obsługi zdarzeń, więc:

self.onBlur = function(data, event) { 
    console.log(event.target); 
} 
+0

Słodki, dzięki koleś! "alert (jQuery (event.target) .val());" zwraca wartość pola tekstowego, tak jak ja też tego potrzebowałem! Jestem pewien, że wcześniej wypróbowałem event.target, no cóż, dziękuję za zwięzłą odpowiedź! – Nnoel

+0

Uwaga: event.target nie działa w IE. musisz użyć event.srcElement dla IE .. Tak więc powinieneś użyć czegoś takiego do obsługi wszystkich przeglądarek: var target = event.target || event.srcElement – portlandrock

+0

@portlandrock: Edytowałem mój post, aby wskazać, że używa on obiektu zdarzenia jQuery, a nie tego samego bezpośrednio z przeglądarki. Jeśli jQuery jest na stronie, nokaut użyje funkcji obsługi zdarzeń jQuery, która znormalizuje właściwość [event.target] (http://api.jquery.com/event.target/), aby można było jej używać w dowolnej przeglądarce, której jQuery obsługuje. – Douglas

Powiązane problemy