2009-08-13 3 views
0

Je le script JQuery suivant:Ce script Jquery peut-il être simplifié?

$(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); 
    } 
    } 
}); }); 

est-il de toute façon de simplifier ce script et faire aussi réutilisable pour des formes différentes?

  • Il n'y a jamais un formulaire sur une page
  • Les boutons sont toujours étiquetés de la même
  • Chaque forme a un identifiant unique

Merci!

+0

Ce n'est pas vraiment une bonne pratique, mais puisqu'il n'y a qu'une seule forme, vous pouvez simplement utiliser le sélecteur $ ('form') pour référencer le formulaire. Ensuite, pour référencer le bouton en tant qu'enfant de cette forme, vous pouvez utiliser $ (this) .find ('input # save_button'). – user120242

Répondre

0

Juste un couple de thougths. Au lieu d'utiliser l'ID, vous pouvez créer une classe pour la forme et ont l'id du bouton Enregistrer et msg ressembler à ceci:

<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); 
    } 
); 

Vous pouvez utiliser la même idée pour la requête AJAX.

+1

Je pense qu'il serait plus facile d'utiliser $ (this) .find, pour rechercher les boutons dans le contexte du formulaire. – user120242

+0

bon appel, rochers jquery! – imjoevasquez

0

Vous référencez l'ID du formulaire deux fois; vous pouvez à la place faire abstraction de la fonction que vous passez à $(document).ready dans une fonction qui prend un argument (l'identifiant du formulaire), puis passer un nom différent à chaque fois en utilisant une fermeture.

function abstracted_ajax_form($formid) 
{ 
    ... 
} 

$(document).ready(function() { abstracted_ajax_form('#new_team'); }); 
Questions connexes