2016-05-07 8 views
-1

Ich akzeptiere kein HTML in meiner PHP-Anwendung, also beabsichtige ich, alles zu blockieren, das mit HTML-Tags eingereicht wird. Ich habe versucht, das folgende JavaScript hinzuzufügen, um zusätzliche jQuery Validate-Regeln für alle Texteingabefelder hinzuzufügen.jQuery Validieren Sie alle Felder aus der Ferne

Ich benutze WordPress Ajax so Aktion und URL werden zusammen eingereicht.

$('input[type="text"]').each(function() { 
    $(this).rules('add', { 
     remote: { 
      url: ajaxurl, 
      type: 'POST', 
      data: { 
       action: 'ad_sanitize', 
      } 
     } 
    }); 
}); 

Die oben js gibt Fehler in Firefox Konsole

TypeError: a.data(...) is undefined ...ar d,e,f,g,h,i,j=this[0] if(b)switch(d=a.data(j.form,"validator").settings,e=d.r... in Jquery,js

$('#formname').validate({ 

    rules: { 
     field1: 'required', 
     field2: 'required', 
    }, 
    message: { 
     field1: 'Required', 
     field2: 'Required' 
    } 
    submitHandler: function (form) { 
     console.log('done'); 
    }); 

Die obige Aktion auf die folgende Funktion server Punkt

function isHtml($string) //This function just checks for html 
{ 
    if ($string != strip_tags($string)) 
    { 
     return true; // Contains HTML 
    } 
    return false; // Does not contain HTML 
} 

function ad_sanitize() { //<- This function calls when ajax call (Tested) 

    foreach ($_POST as $key => $value) { 
     if (isHtml($value) === true) { 
      echo 'Only plain text allowed.'; 
     } else { 
      echo true; 
     } 

    } 
} 

Problem: Als ich fügte der über JavaScript, mein jQuery Validate funktioniert nicht anno re (Formular ohne Validierung), und natürlich wird die Fernprüfung nicht aufgerufen.

+0

Achten Sie auf Ihre Fehler JavaScript-Konsole. – Sparky

Antwort

0

Problem: When I added the above JavaScript, my jQuery Validate will not work anymore (form submitted without validating), and of course, the remote check is not called.

Das ist, weil Sie Ihre JavaScript mit einigen Syntax Probleme gebrochen haben, die JavaScript-Konsole Fehler auslösen werden sollte:

  • Sie haben die messages Objekt als message falsch geschrieben.

  • Sie vermissen ein Komma nach Ihrem messages Objekt.

  • Sie fehlen eine schließende } Klammer für die submitHandler Funktion.


$('#formname').validate({ 
    rules: { 
     field1: 'required', 
     field2: 'required', 
    }, 
    messages: { // <- "messages" was misspelled here 
     field1: 'Required', 
     field2: 'Required' 
    }, // <- comma was missing from here 
    submitHandler: function (form) { 
     console.log('done'); 
    } // <- closing brace was missing from here 
}); 

Soweit Ihre serverseitigen Code:

Per remote documentation, die Antwort vom Server muss ein JSON-String sein. Die remote Methode funktioniert absolut nicht, wenn Sie die Antwort nicht als eine JSON-codierte Zeichenfolge wiedergeben.

function ad_sanitize() { 

    foreach ($_POST as $key => $value) { 
     if (isHtml($value) === true) { 
      echo json_encode("Only plain text allowed."); // fail validation using this message 
     } else { 
      echo json_encode("true"); // pass validation 
      // echo "true"; // also works the same (notice the quotes) 
     } 
    } 

} 

EDIT: Beispiel für data in the docs verwenden Im Anschluss an eine Funktion ...

$('input[type="text"]').each(function() { 
    $(this).rules('add', { 
     remote: { 
      url: ajaxurl, 
      type: 'POST', 
      data: { 
       action: function() { 
        return 'ad_sanitize'; 
       } 
      } 
     } 
    }); 
}); 
+0

Vielen Dank, die Syntax war richtig in meinen Codes, aber wahrscheinlich fehlerhaft, wenn ich hier tippe. Wie auch immer kannst du meine aktualisierte Frage überprüfen? Ich denke etwas mit dem Hinzufügen neuer Regeln. Dieser Teil selbst gibt jquery Fehler zurück, ohne dass dieser Teil meine ganze js und ajaxes alles gut funktioniert. –

+0

@DaveTeu, siehe meine aktualisierte Antwort. Möglicherweise benötigen Sie eine Funktion in 'data'. – Sparky

+0

@DaveTeu, die 'remote' Methode funktioniert absolut nicht, wenn Sie die Antwort nicht als JSON-codierte Zeichenfolge ausgeben. – Sparky