2017-02-02 20 views
0

Ich habe ein Formular, das 4 Tasten hat, die vom Typ sind senden senden jeweils einen anderen Action in der Controller. Für jede Taste klicken ich verschiedene Eingaben validieren muß, damit ich ein click Ereignis für die Schaltfläche mit den gleichen class habe wie folgt:Validierung von verschiedenen Typen auf verschiedenen Tasten klicken

$('.store-action').click(function (e) { 
    var ignoreValidationElements = [], 
     id = $(this).attr("id"), 
     name = $(this).attr("name"), 
     action, 
     serialNumber = $('#serial').val(), 
     param; 

    switch (id) { 
     case "submit-all": 
      action = submitUrl; 
      ignoreValidationElements.length = 0; 
      if ($('#collapsTwo').is(':visible')) { 
       $('#collapsTwo input').each(function (index, element) { 
        var innerId = $(element).attr("id"); 
        ignoreValidationElements.push(innerId); 
       }); 
      } else { 
       ignoreValidationElements.push("serial"); 
      } 
      break; 
     case "add-item": 
      action = addItemUrl; 
      ignoreValidationElements.length = 0; 
      ignoreValidationElements.push("cID"); 
      ignoreValidationElements.push("cAdd"); 
      ignoreValidationElements.push("cNum"); 
      ignoreValidationElements.push("cEmail"); 
      break; 
     case "save-all": 
      action = saveUrl; 
      ignoreValidationElements.length = 0; 
      ignoreValidationElements.push("cID"); 
      ignoreValidationElements.push("cAdd"); 
      ignoreValidationElements.push("cNumer"); 
      ignoreValidationElements.push("cEmail"); 
      if ($('#collapsTwo').is(':visible')) { 
       $('#collapsTwo input').each(function (index, element) { 
        var innerId = $(element).attr("id"); 
        ignoreValidationElements.push(innerId); 
       }); 
      } else { 
       ignoreValidationElements.push("serial"); 
      } 
      break; 
     case "cancel": 
      action = cancelUrl; 
      ignoreValidationElements.length = 0; 
      ignoreValidationElements.push("cID"); 
      ignoreValidationElements.push("cAdd"); 
      ignoreValidationElements.push("cNumb"); 
      ignoreValidationElements.push("cEmail"); 
      if ($('#collapsTwo').is(':visible')) { 
       $('#collapsTwo input').each(function (index, element) { 
        var innerId = $(element).attr("id"); 
        ignoreValidationElements.push(innerId); 
       }); 
      } else { 
       ignoreValidationElements.push("serial"); 
      } 
      break; 
    } 

Was ich versuche Artikel hinzufügen zu einem arrayignoreValidationElements zu erreichen, ist die I kann dann die Validierung beim Senden von Formularen ignorieren. Wenn Sie auf #submit-all klicken, dann möchte ich nur die untere Hälfte des Formulars ignorieren. Wenn save-all oder cancel geklickt wird, möchte ich die gesamte Formularvalidierung ignorieren. Und wenn add-item angeklickt wird, dann möchte ich die obere Hälfte der Formularvalidierung ignorieren. Wie Sie sehen können, schreibe ich den gleichen Code immer wieder. Meine Frage ist, wie kann ich minimalen Code für dieses Szenario schreiben?

+0

Zwar gibt es nichts falsch mit Ihrem Ansatz ist, ich habe ich Ansätze finden sagen, wo jede Funktion eine führt ... na ja ... Funktion :) elegantere und lesbar. Ich bin nicht sicher, wie Ihr Geschäft aussieht, aber ich würde lieber ganz andere Handler für verschiedene Aktionen (und Schaltflächen) haben und vielleicht den gemeinsamen Code (falls vorhanden) in passend benannte Funktionen setzen, die von diesen Handlern aufgerufen werden. Natürlich unterscheiden sich Stil und Geschmack, es ist nur eine Meinung. –

Antwort

1

Try this:

function ignoreValidation(ignoreValidationElements) { 
    ignoreValidationElements.length = 0; 
    ignoreValidationElements.push("cID"); 
    ignoreValidationElements.push("cAdd"); 
    ignoreValidationElements.push("cNum"); 
    ignoreValidationElements.push("cEmail"); 
} 

$('.store-action').click(function (e) { 
    var ignoreValidationElements = [], 
     id = $(this).attr("id"), 
     name = $(this).attr("name"), 
     action, 
     serialNumber = $('#serial').val(), 
     param; 

    switch (id) { 
     case "submit-all": 
      action = submitUrl; 
      ignoreValidationElements.length = 0; 
      if ($('#collapsTwo').is(':visible')) { 
       $('#collapsTwo input').each(function (index, element) { 
        var innerId = $(element).attr("id"); 
        ignoreValidationElements.push(innerId); 
       }); 
      } else { 
       ignoreValidationElements.push("serial"); 
      } 
      break; 
     case "add-item": 
      action = addItemUrl; 
      ignoreValidation(ignoreValidationElements); 
      break; 
     case "save-all": 
     case "cancel": 
      action = (id == "save-all") ? saveUrl : cancelUrl; 
      ignoreValidation(ignoreValidationElements); 
      if ($('#collapsTwo').is(':visible')) { 
       $('#collapsTwo input').each(function (index, element) { 
        var innerId = $(element).attr("id"); 
        ignoreValidationElements.push(innerId); 
       }); 
      } else { 
       ignoreValidationElements.push("serial"); 
      } 
      break; 
     } 
+0

Danke, ich werde das versuchen und dich wissen lassen, wie es mir geht – Code

Verwandte Themen