2008-09-26 10 views
33

Mam stronę z normalnym formularzem z przyciskiem przesyłania i jQuery, która wiąże zdarzenie przesyłania formularza i zastępuje je e.preventDefault() i uruchamia AJAX dowództwo. Działa to dobrze po kliknięciu przycisku przesyłania, ale po kliknięciu linku z onclick='document.formName.submit();' wydarzenie nie zostanie przechwycone przez procedurę obsługi zdarzeń formularza AJAX. Wszelkich pomysłów, dlaczego nie lub jak to działa bez wiązania wszystkich elementów?Przesłanie jQuery formularza nie działa, gdy zgłoszenie jest wywoływane przez javascript na elemencie

Odpowiedz

35

Kilka sugestii:

  • nadpisać funkcję, aby zrobić swoje zło licytacja

    var oldSubmit = form.submit; 
    form.submit = function() { 
     $(form).trigger("submit"); 
     oldSubmit.call(form, arguments); 
    } 
  • Dlaczego nie wiążą wszystkich <a> tagów złożyć? Wtedy nie trzeba robić żadnych łatanie małpa, a może to być tak proste, jak to (zakładając, wszystkie linki są wewnątrz tagu formularza):

    $("form a").click(function() { 
     $(this).parents().filter("form").trigger("submit"); 
    }); 
+2

Co oznacza "formularz" w pierwszym przykładzie? – tishma

+0

@tishma Element DOM formularza, podobnie jak w tym przykładzie: http://stackoverflow.com/a/931482/1048862 – Matt

+0

To nie zadziała w niektórych starszych przeglądarkach. Właściwość JS .submit jest przyczyną. Użyj $(). Submit (function() {...}); zamiast. –

11

Jeśli korzystasz z jQuery, powinieneś załączać zdarzenia za pomocą własnego event mechanism, a nie za pomocą właściwości "on" (onclick itp.). Ma również własną metodę wyzwalania zdarzeń, o wdzięcznej nazwie "trigger", której należy użyć w celu aktywowania zdarzenia przesyłania formularza.

+0

Zgadzam się - nie używaj natrętnego kodu JavaScript w swoim kodzie, tylko sprawia, że ​​bóle głowy, jeśli mieszanie dyskretne JavaScript z nim. –

1

Dzięki Eran

Używam tego wiążącego kodeksu

this._form.bind('submit', Delegate.create(this, function(e) { 
    e.preventDefault(); 
    this._searchFadeOut(); 
    this.__onFormSubmit.invoke(this, new ZD.Core.GenericEventArgs(this._dateField.attr('value'))); 
}); 

zdarzenie ale jest dziedzictwo kod onclick na HTML i wolałbym go nie zmieni ponieważ istnieje tak wiele linków.

+0

Problem polega na tym, że wywołanie metody submit() formularza nie spowoduje aktywacji zdarzenia. Podobnie jest z metodą input focus() - po prostu nie przechodzą przez zwykły łańcuch delegowania zdarzeń. –

1

Ten pracował dla mnie:

Producent obojętne przycisk, ukryć prawdziwy przedstawić z imienia przedstawienia,

a następnie:

$("#mySubmit").click(function(){ 
    $("#submit").trigger("click"); }); 

ustawić obsługi zdarzeń na manekinie do uruchomienia kliknij na fo przycisk rm submit. pozwól przeglądarce dowiedzieć się, jak przesłać formularz ... W ten sposób nie musisz preventDefault na formularzu submit, w którym zaczyna się problem.

To wydawało się rozwiązać problem.

Powiązane problemy