2017-12-04 2 views
-1
(function($) { 
    $(document).ready(function(){ 
     $('form.wpcf7-form input').each(function(){ 
     //or you could also do this which is even less maintenance 
     var name = $(this).attr('name').substring(0, 10); 
     var type = $(this).attr('type'); 
     switch(type){ 
      case 'radio': 
      case 'checkbox': 
      name += '-'+$(this).attr('value'); 
     } 
     $(this).attr('class',name); 
     }); 
    }); 
    })(jQuery); 

lese ich versuchen, die Klassennamen zu schneiden, aber ich bin immer Uncaught TypeError: Cannot read property 'substring' of undefined Fehler.Erster Uncaught Typeerror: kann Eigenschaft ‚Teilzeichenfolge‘ undefinierten

Kann mir jemand helfen, diesen Fehler zu beheben?

Danke!

+4

Das bedeutet, dass '$ (this) .attr ('name')' entweder undefined (oder null) oder keine Zeichenfolge ist. Das verwandte HTML wäre sehr hilfreich. – briosheje

+0

Fehlerbehebung Tipp: Welche Zeile verursacht das Problem? Ihre Konsole wird es Ihnen sagen. Nächster Tipp: vereinfachen. Was ist der Wert von $ (this) .attr ('name') '? (Hinweis: Es ist nicht definiert, weshalb Sie den Fehler erhalten). –

+0

posten Sie bitte Ihre html dom –

Antwort

0

Da dies WordPress und Kontaktformular 7 ist, habe ich einige der HTML außerhalb Ihrer Kontrolle.

Wenn Sie eine Klasse basierend auf dem Namen hinzufügen, wird der Eindruck erweckt, Sie möchten etwas an diesen Eingaben anpassen. Wussten Sie, dass Sie basierend auf dem Namen stylen können, ohne Klassen hinzuzufügen? Zum Beispiel für eine Texteingabe „first-name“ genannt, können Sie dies in Ihrem CSS tun:

input[type="radio"][name="first-name"] { 
    border-color: red; 
} 

Wenn das nicht Ihre Bedürfnisse befriedigen (und die direkte Frage zu beantworten Sie gefragt), dann Sie bräuchten eine bedingte zu tun, damit Sie diesen Fehler nicht werfen:

// simplify to a single no-conflict safe document-ready 
jQuery(function($) { 
    $('form.wpcf7-form input').each(function() { 
     if ($(this).attr('name')) { 
      var name = $(this).attr('name').substring(0, 10); 
      var type = $(this).attr('type'); 
      switch(type) { 
       case 'radio': 
       case 'checkbox': 
        name += '-'+$(this).attr('value'); 
      } 

      $(this).attr('class',name); 
     } 
    }); 
}); 
+0

Vielen Dank! – HoRde

0

da mehrere Personen bemerkt haben, können Sie den Fehler nicht definiert bekommen, weil eines der Eingabeelemente auf Sie Seite nicht Habe ein Namensattribut. Dies unterbricht das Skript und verhindert, dass es ausgeführt wird.

Sie müssen eine bedingte Prüfung durchführen, um festzustellen, ob das Attribut name vorhanden ist. So etwas würde funktionieren:

Verwandte Themen