2009-08-13 6 views
0

Ich habe folgenden JQuery-Skript:Kann dieses Jquery-Skript vereinfacht werden?

$(document).ready(function() { 
// When the submit button of the new team form is clicked... 
$('#new_team').submit(function() { 
    // Disable & rename the save button 
    $('input#save_button', this).attr('disabled', 'disabled').val('Saving...'); 
    // Fade in the saving message 
    $("#saving-msg").fadeIn(200); 
}); 

// Perform the AJAX request to the server 
$('#new_team').ajaxForm({ 
    url: "/teams/create.json", 
    type: "POST", 
    dataType: "json", 
    beforeSubmit: function(formData, jqForm, options) {}, 
    success: function(response) { 
    if(response.success == true) { 
     // If no errors then redirect 
     window.location = "/teams/" + response.team_id; 
    } else { 
     // Enable and rename the save button 
     $('input#save_button').removeAttr('disabled').val('Save'); 
     // Output errors 
     $("#error_messages").html(errorMessages(response)).hide().fadeIn(300); 
     // Fade out save message 
     $("#saving-msg").fadeOut(200); 
     // Scroll to the top 
     window.scrollTo(0,0); 
    } 
    } 
}); }); 

Gibt es trotzdem, dieses Skript zu vereinfachen und auch für verschiedene Formen wiederverwendbar machen?

  • Es ist immer nur ein Formular auf einer Seite
  • Die Tasten die gleiche
  • Jede Form immer markiert sind, hat eine eindeutige ID

Dank!

+0

Dies ist nicht wirklich gute Übung, aber da es immer nur ein Formular gibt, können Sie einfach den Selektor $ ('form') verwenden, um auf das Formular zu verweisen. Dann referenziere den Button als Kind dieses Formulars, so dass du $ (this) .find ('input # save_button') verwenden kannst. – user120242

Antwort

0

Nur ein paar Tausendstel. Statt die ID verwenden, können Sie eine Klasse für die Form und haben die ID der Schaltfläche speichern erstellen und msg wie folgt aussehen:

<id_of_form>_save_button 
<id_of_form>_error_msgs 
<id_of_form>_saving_msg 


$(document).ready(function() { 
    $('.ajax_form').submit(function() { 
     $('.save_button', this).attr('disabled', 'disabled').val('Saving...'); 
     $(this.attr('id')+"_saving_msg").fadeIn(200); 
    } 
); 

Sie können die gleiche Idee für die Anforderung AJAX verwenden.

+1

Ich denke, es wäre einfacher, $ (this) .find zu verwenden, um nach den Schaltflächen im Kontext des Formulars zu suchen. – user120242

+0

guten Ruf, jQuery rockt! – imjoevasquez

0

Sie verweisen zweimal auf die ID des Formulars; Sie können stattdessen die Funktion, die Sie an $(document).ready übergeben, in eine Funktion abstrahieren, die ein Argument (die ID des Formulars) verwendet und dann einfach jedes Mal einen anderen Namen mit einem Closure übergeben.

function abstracted_ajax_form($formid) 
{ 
    ... 
} 

$(document).ready(function() { abstracted_ajax_form('#new_team'); }); 
Verwandte Themen