2011-01-07 18 views
25
<input type="text" id="test_value" name="test_value" value="xyz" /> 
<input id="test_default" name="test_default" type="checkbox" onclick="with(this.form.elements['test_value']) { disabled = this.checked; if (this.checked) { value = ''; } else {if(value=='') {value=' '; value = '';}}};" /> 

Inline onclick jest generowany przez cms, nad którymi nie mam kontroli. Chcę wykonać $("#test_default").click(); z jQuery, ale to nie działa, ponieważ nie jest powiązane z menedżerem zdarzeń jQuery.Użycie jQuery do wyzwolenia zdarzenia html onclick

Próbowałem odmiany

$("#test_default").click(function (e) { 
        $(e.target).attr("onclick").apply(checkbox, [e]); 
        return false; 
       }).click(); 

ale bez skutku. Proszę pomóż.

Dzięki.

Istnieje wiele różnych funkcji, które mogą być wbudowane w onclick. Tak naprawdę nie ma możliwości ich duplikowania i uruchamiania równolegle.

Odpowiedzi działają w małej wersji demonstracyjnej, ale nie w środowisku na żywo. Proszę spojrzeć na http://jsfiddle.net/GtJjt/ Potrzebuję, aby pole wyboru uruchamiało się programowo.

Dziwnie tylko $("#metadata_field_text_10190_default")[0].click(); aktywuje wydarzenie poprawnie. Czy ktoś może to wyjaśnić?

+0

istnieje żaden typ on . Prawdopodobnie musisz powiązać click() lub użyć live(). – Diablo

Odpowiedz

34

połączeń rodzimy Doma onclick bezpośrednio (see demo):

$("#test_default")[0].onclick(); 

Albo bez jQuery w ogóle,

document.getElementById("test_default").onclick(); 

Aktualizacja:

rzeczywisty problem jest z interakcją między jQuery .click() i wbudowany kod onclick. jQuery .click() faktycznie robi dwie rzeczy: pierwsza to wywołuje żadnych obsługi zdarzeń, tym: kod inline onclick, następnie Powoduje to pole wyboru, aby stać się sprawdził.

Problem powstaje, ponieważ wbudowany kod testuje, czy pole wyboru jest zaznaczone. Ponieważ jest to wywoływane jako pierwsze, kod wykrywa, że ​​pole wyboru nie jest sprawdzane i nic nie robi. Teraz, po tym, jQuery idzie i sprawdza pole wyboru.

Jak to naprawić? Najpierw sprawdzamy pole wyboru, a następnie wywołuje procedurę obsługi w linii. Niestety, nie możemy użyć jQuery's .click(), aby wywołać wbudowany moduł obsługi, ponieważ odkaże to pole wyboru ponownie (będzie również wywoływać inne procedury obsługi zdarzeń związane z jQuery, jeśli dodasz je w przyszłości, prawdopodobnie tego nie chcesz). Dlatego używamy natywnej metody DOM, którą opisałem wcześniej, ponieważ jej jedynym skutkiem jest uruchomienie kodu wbudowanego.

kod końcowy jest taki:

$("#metadata_field_text_10190_default").attr("checked", true)[0].onclick(); 

Zobacz demo: http://jsfiddle.net/GtJjt/3/. (Do kodu demonstracyjnego użyto kodu console.log, aby udowodnić, że działa kod wbudowany. Usuń to, jeśli Twoja przeglądarka nie jest przeglądarką Firefox lub Chrome albo ulegnie awarii).

Aktualizacja ponownie:

nie widzę swoje rozwiązanie wcześniej Simon, dzięki za przypomnienie mi o [0].click(). Zasadniczo jest to natywny odpowiednik dla jQuery's .click() i działa, ponieważ robi to, co opisałem powyżej (najpierw zaznaczając pole wyboru, a następnie wywołując kod wbudowany). Ostrzeżenie: spowoduje to również wywołanie wszelkich procedur obsługi zdarzeń związanych z jQuery, które mogą nie być tym, czego potrzebujesz.

+0

Czy możesz rzucić okiem na mój link? To nie działa. – Simon

+0

@Simon, zobacz zaktualizowaną odpowiedź. –

+0

Świetnie. Dzięki za wyjaśnienie mój główny kod jest w '$ (" input [type = checkbox]: checked "). Each (function() {});' tak działa mimo to. Cieszę się, że mogę to naprawić. – Simon

1

Tylko nie return false zrobić i będzie to się nazywa:

$("#test_default").click(function (e) { 
    //hi! 
}).click(); 

Jeśli chcesz zapobiec domyślną akcję, użyj e.peventDefault() zamiast, który nie zabije to wydarzenie. Ponadto, w odniesieniu do twojego wbudowanego handlarza onclick (dlaczego nie zrobić tego w sposób dyskretny?), Zdecydowanie nie zalecam używania with.

+0

Jest generowany przez CMS, zmora standardów HTML. –

+0

Dzięki. To też działa. Ale @ Box9 dostał minutę wcześniej i używa mniej znaków. Twój ma tę zaletę, że może później użyć metody .click(). Twoje zdrowie. – Simon

+1

@Simon - Mniej postaci! = Dokładniej, dlaczego zabiłeś wydarzenie, którego nie potrzebujesz? Jeśli potrzebujesz mniej znaków i nie masz nic więcej w treserze '$ (" # test_default "). Kliknij()', ale to nie było to, o co prosiłeś :) –

2

użyłem spust w html z onclick wydarzenie następująco:

$("#test_default").trigger("onclick"); 
+0

To zadziałało dla mnie. Ale zamiast używać '.trigger (" onclick ")', użyłem '.trigger (" click ")'. Dzięki jeszcze raz! –

+0

Miło cię poznać @AnneLagang – borchvm

0

używam następny kod:

$("your_selector")[0].click(); 

W twoim przypadku:

$("#test_default")[0].click(); 
Powiązane problemy