• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Problem: Selectbox-Inhalt überprüfen

chpo7234

New member
Hallo Leute,

auf meinem Ubuntu-Testsystem mit Firefox hatte ich keine Probleme. Nun wurden meine Scripte mal auf den Webserver geladen. Wenn ich die Seite nun aufrufe, denn wird mir in der Fehlerkonsole angezeigt, dass es die Methode "contains()" nicht gibt. Es handelt sich um die zweite If-Abfrage aus folgendem Code(Zeile 4):

Code:
function changeTboxSnmpCom(){
  $(document).ready(function(){
    if (document.getElementById("agenttype")){
      if (!$("#agenttype").val().contains("SNMP")) {
        /* Clears the textbox: */
        $("#snmpCom").val("");
        /* Locks the textbox */
        $("#snmpCom").prop("readonly",true);
      }
      else {
        /* Unlock the textbox */
        $("#snmpCom").prop("readonly",false);
      }
    }
  });
}

Ich habe im Moment keinen Zugriff auf den Webserver. Im Testsystem funktioniert aber auch folgende Abfrage:
Code:
if (!$("#agenttype").val().indexOf("SNMP")>-1) {
/**/ }

Woran kann es liegen, dass die "contains()"-Methode im Testsystem aber nicht im Live-System erkannt wird?

Und könnte ich mit der indexOf()-Alternative Abhilfe schaffen?

MfG
 
Sieht nach jQuery aus. Wie wird das denn geladen? Vlt. fehlt das auf dem Webserver einfach. Was sagt die F12 Konsole des Browsers denn dazu?
 
Danke für deine Antwort, mikdoe.

jQuery ist auf dem Live-Server mit eingebunden und wird auch verwendet. Geladen wird es im Header-Bereich durch <script src="javascript/jquery-laters.js" type="text/javascript"></script>

Die Entwicklerkonsole von Chrome spuckt folgendes aus:

Code:
Uncaught TypeError: $(...).val(...).contains is not a function
(anonymous function) @ hostSettings.js:6
fire @ jquery-latest.js:3119
self.add @ jquery-latest.js:3165
jQuery.fn.ready @ jquery-latest.js:3399
changeTboxSnmpCom @ hostSettings.js:4
onload @ hostSettings.php:9

Mit der Meldung "Anonyme Funktion im Script hostSettings.js Zeile 6" ist genau die Zeile mit der if-Abfrage und der contains()-Methode angesprochen. Contains() wird dabei rot unterstrichen. In der Testumgebung habe ich exakt die gleiche jQuery-Datei verwendet - dort funktioniert auch alles.. In anderen Scripten gibt es auf dem Live-Server keine Probleme mit jQuery.

MfG
 
Zuletzt bearbeitet von einem Moderator:
Gibt es denn $("#agenttype").val() zu diesem Zeitpunkt schon/noch im DOM oder ist diese ID (noch) nicht vorhanden? Obwohl mich dann wundern würde, dass ein jQuery Kommando eine Fehlermeldung wirft. Das tut es nämlich in älteren Versionen nicht.
 
Sorry für die Code-Tags und danke noch mal für die Antwort/den Tipp.

Ich habe in meinem Code tatsächlich noch etwas ungewöhnliches gefunden.

Im HTML-Body habe ich die Methode direkt mittels onload-Event aufgerufen:
Code:
<body onload="changeTboxSnmpCom();">

Erst irgendwann später im Code wird die Selectbox denn fest gelegt.

Mein Ziel war es, nach dem Erstellen der SelectBox die aktuelle Auswahl zu überprüfen und daraufhin bestimmte Ereignisse auszulösen.
Ich habe jetzt folgenden Code unterhalb der SelectBox eingesetzt
Code:
<?php echo "<script type=\"text/javascript\">changeTboxSnmpCom();></script>";
Ich hoffe dass es nun so später im Live-System funktioniert.

MfG
 
Zuletzt bearbeitet:
ja man scripte auch im body starten. wichtig ist immer die zeitliche reihenfolge der elemente im DOM.
 
Ja ja, das ewige Leid mit den Browsern.
Ich sehe aber auch jetzt erst nach ganz genauem Lesen, dass du unterschiedliche Browser für lokal und live verwendet hast. Sowas sollte man immer vermeiden. Ich arbeite immer in einem einzigen Browser (IE11) sowohl live als auch lokal. Und den anschließenden Cross-Browser Test mache ich dann live mit allen anderen Browsern.
 
Ich würde langfristig auf STRING.includes() setzten, da das im ECMA6 drin ist und contains nicht. Aber aus Rückwärtskompatibilitätsgründen würde ich zur Zeit auf jeden Fall mit der .indexOf !== -1 Variante arbeiten.

Du könntest aber natürlich auch mit einem Polyfill arbeiten:
Code:
if (!String.prototype.includes){
	String.prototype.includes = function includes(searchString/*, searchPosition*/){
		var searchPosition;
		if (arguments.length > 1){
			searchPosition = arguments[1];
		}
		else {
			searchPosition = 0;
		}
		return this.indexOf(searchString) >= searchPosition;
	};
}
 
Zurück
Oben