Mam podstawowe wejście przycisku FAPI, które jest włączone #ajax i działa dobrze, ale chcę dodać JS „Jesteś pewien?” wyskakujące okienko z potwierdzeniem po kliknięciu przycisku przed faktycznym uruchomieniem kodu, i nie jestem pewien, jak to zrobić, ponieważ JS FAPI wydaje się jeść kliknięcie, zanim będę mógł do niego dotrzeć, bez względu na to, co zrobię.
Próbowałem dodać wbudowany moduł obsługi onclick, na przykład:
$form['search_filters']['channels']['channel_delete_' . $channel->nid] = array(
'#type' => 'button',
'#name' => 'channel_delete_' . $channel->nid,
'#value' => 'Delete',
'#attributes' => array(
'class' => array('confirm'),
'onclick' => "return confirm('Are you sure you want to delete that?')"
),
'#button_type' => 'no-submit',
'#ajax' => array(
'callback' => 'delete_channel_callback',
'wrapper' => 'channel_container_' . $channel->nid
),
);
... co nie pomaga, a także próbowałem dodać:
$('.confirm').click(function(e) {
e.preventDefault();
alert('Is this recognized')? // never runs
});
w JS mojego modułu, który jest również ignorowany.
Jakieś inne pomysły? Czy istnieje sposób, aby dodać moduł obsługi przesyłania do górnej części stosu, który rozpozna Drupal #ajax?
źródło
$('.confirm').unbind('click');
) ... czy źle to czytam? przepraszam, nie znamunbind
potwierdzając, że Jeroen naprawia kod googletorp.
Jednak sam odkryłem, że znaki typu „mousedown” muszą zostać cofnięte i ponownie powiązane. Tak więc fragment kodu, który zadziałał dla mnie, jest następujący:
źródło
Pytanie jest stare, ale interesowało mnie to. Moim zdaniem najłatwiejszym sposobem jest użycie zdarzenia click w definicji Ajax, ponieważ Drupal domyślnie używa zdarzenia mousedown:
Następnie wystarczy dodać
.mousedown()
zdarzenie do przycisku w pliku JavaScript, ponieważ jest on uruchamiany przed zdarzeniem kliknięcia:Jeśli nadal chcesz, aby Twoje żądanie Ajax było wywoływane ze zdarzeniem mousedown, możesz użyć zdarzenia niestandardowego:
Następnie możesz wywołać to zdarzenie w
.mousedown()
przypadku pliku JavaScript:Obie wersje działają!
źródło
preventDefault
w moim module obsługi kliknięć, aby nadal uniemożliwiać normalne (nie js) przesyłanie formularza.Czy próbowałeś uruchomić JS w zachowaniu Drupala? Może się tak zdarzyć, że Twój program do obsługi kliknięć jest dołączany za Drupalem.
Tak czy inaczej, powinieneś być w stanie usunąć powiązanie programu obsługi kliknięć Drupala na przycisku, abyś został wywołany jako pierwszy i możesz wywoływać procedurę obsługi kliknięć Drupala Ajax ręcznie (i warunkowo).
źródło
Odpowiadając, aby zauważyć, że kod googletorp nie jest w 100% poprawny.
Musisz zmienić linię, w której są przechowywane zdarzenia:
W ten sposób eliminujesz wszelkie problemy z odniesieniami do obiektu, więc gdy odłączysz zdarzenia kliknięcia, nie rozłączysz się również w twoim var;)
Należy również pamiętać, że od jQuery 1.8 metoda .data () jest przestarzała. Pobieranie danych zdarzeń odbywa się teraz za pomocą wewnętrznej struktury danych:
Źródło: http://blog.jquery.com/2011/11/08/building-a-slimmer-jquery/
źródło
Znalazłem wiele przydatnych odpowiedzi powyżej i udało mi się uruchomić mój formularz. Podsumowując, działało to w mojej aplikacji: przycisk Usuń formularz z oknem dialogowym potwierdzenia i wywołaniem zwrotnym AJAX, aby zmodyfikować zawartość listy wyboru.
Javascript:
Element formularza (wybierz listę) do modyfikacji:
Przycisk:
I na koniec, wywołanie zwrotne AJAX:
źródło
Naprawiłem to, modyfikując plik drupal misc / ajax.jx.
Utwórz kopię pliku ajax.js i umieść go w dowolnym module niestandardowym i zmodyfikuj wcześniej
Drupal.ajax = function (base, element, element_settings) {
funkcję Wyślij:Dla mnie działa dobrze.
źródło
Może trochę stary, ale zastanawiam się, dlaczego nie możemy po prostu użyć:
źródło