• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

HTML powiązane pola wyboru

VPS Starter Arubacloud
0 głosów
299 wizyt
pytanie zadane 28 listopada 2017 w JavaScript przez Snow Początkujący (360 p.)

Witam serdecznie.

staram się zrobić połączonego selecta (1 select wpływa na wartości wyświetlane w drugim).

Udało mi się znaleźć rozwiązanie, które bardzo dobrze radzi sobie z danymi, które są na sztywno wpisane w pliku. chciałem kod zmodyfikować tak, aby dane pobierane były z bazy - niestety bezskutecznie. Zaczyna brakować mi pomysłów, co z fantem zrobić. w momencie, gdy staram się wprowadzić jakąś ingerencję w plik "karta_flota_pobierz" program przestaje reagować (wystarczy nawet zwykłe echo). Byłbym bardzo wdzięczny za jakąś podpowiedź / informacje / nakierowanie mnie jak sprawę ugryźć.

plik "karta_flota_dodaj" - zawiera skrypt oraz form z selectami:

skrypt:

<script type="text/javascript" src="_ajax.js"></script>
<script type="text/javascript">
var ajax = new sack();

function pobierz_liste(sel)
{
	var podmiot = sel.options[sel.selectedIndex].value;
	document.getElementById('obce_id').options.length = 0;	// Empty city select box
	if(podmiot.length>0){
		ajax.requestFile = 'karta_flota_pobierz_.php?podmiot='+podmiot;	// Specifying which file to get
		ajax.onCompletion = lista_wpisow;	// Specify function that will be executed after file has been found
		ajax.runAJAX();		// Execute AJAX function
	}
}

function lista_wpisow()
{
	var obj = document.getElementById('obce_id');
	eval(ajax.response);	// Executing the response from Ajax as Javascript code	
}

		
</script>

form:

<form action="" method="post">
<table>
	<tr>
		<td>Country: </td>
		<td><select id="lista" name="lista" onchange="pobierz_liste(this)">
			<option value="">Wybierz</option>
			<option value="maszyna">Maszyna</option>
			<option value="pracownik">Pracownik</option>
			<option value="samochod">Samochód</option>
		</select>
		</td>
	</tr>
	<tr>
		<td>City: </td>
		<td><select id="obce_id" name="obce_id">
		
		</select>
		</td>
	</tr>
</table>
</form>   

plik "karta_flota_pobierz" zawiera elementy do wczytania do selecta. pisane ręcznie (case "pracownik") działa bez problemu. połączone z bazą danych (case: maszyna) nie działa.

<?php
 include('_funkcje.php');
 
   if(isset($_GET['podmiot']))
   {
  
      switch($_GET['podmiot'])
      {
     
         case "maszyna":     
             chainSelect("maszyny", "nazwa", "numer");       
         break;
     
     
     case "pracownik":
       
       echo "obj.options[obj.options.length] = new Option('Aalborg','11');
";
       echo "obj.options[obj.options.length] = new Option('Copenhagen','12');
";
       echo "obj.options[obj.options.length] = new Option('Odense','13');
";
       
       break;

    }
  }

plik "_funkcje" parametry do połączenia z bazą i funkcję chainSelect

function chainSelect($tab, $val1, $val2)
{
 $lacze=mysqli_connect(DB_SERWER, DB_LOGIN, DB_HASLO, DB_BAZA) or die ('Brak połączenia.');

 $kwerenda="SELECT id, $val1, $val2"
         ." FROM $tab"
         ." ORDER BY $val1 ASC, $val2 ASC";
 
   mysqli_query($lacze, $kwerenda) or die('Brak Połączenia'); 
   
   while($row=  mysqli_fetch_row($result))
   {
    $id=$row[0];
    $info=$row[1].$row[2]; 
    
      echo "obj.options[obj.options.length] = new Option($info,$id);";       
   }
    
}

plik _ajax.js:


/* Simple AJAX Code-Kit (SACK) v1.6.1 */
/* Š2005 Gregory Wild-Smith */
/* www.twilightuniverse.com */
/* Software licenced under a modified X11 licence,
   see documentation or authors website for more details */

function sack(file) {
	this.xmlhttp = null;

	this.resetData = function() {
		this.method = "POST";
  		this.queryStringSeparator = "?";
		this.argumentSeparator = "&";
		this.URLString = "";
		this.encodeURIString = true;
  		this.execute = false;
  		this.element = null;
		this.elementObj = null;
		this.requestFile = file;
		this.vars = new Object();
		this.responseStatus = new Array(2);
  	};

	this.resetFunctions = function() {
  		this.onLoading = function() { };
  		this.onLoaded = function() { };
  		this.onInteractive = function() { };
  		this.onCompletion = function() { };
  		this.onError = function() { };
		this.onFail = function() { };
	};

	this.reset = function() {
		this.resetFunctions();
		this.resetData();
	};

	this.createAJAX = function() {
		try {
			this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
		} catch (e1) {
			try {
				this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
			} catch (e2) {
				this.xmlhttp = null;
			}
		}

		if (! this.xmlhttp) {
			if (typeof XMLHttpRequest != "undefined") {
				this.xmlhttp = new XMLHttpRequest();
			} else {
				this.failed = true;
			}
		}
	};

	this.setVar = function(name, value){
		this.vars[name] = Array(value, false);
	};

	this.encVar = function(name, value, returnvars) {
		if (true == returnvars) {
			return Array(encodeURIComponent(name), encodeURIComponent(value));
		} else {
			this.vars[encodeURIComponent(name)] = Array(encodeURIComponent(value), true);
		}
	}

	this.processURLString = function(string, encode) {
		encoded = encodeURIComponent(this.argumentSeparator);
		regexp = new RegExp(this.argumentSeparator + "|" + encoded);
		varArray = string.split(regexp);
		for (i = 0; i < varArray.length; i++){
			urlVars = varArray[i].split("=");
			if (true == encode){
				this.encVar(urlVars[0], urlVars[1]);
			} else {
				this.setVar(urlVars[0], urlVars[1]);
			}
		}
	}

	this.createURLString = function(urlstring) {
		if (this.encodeURIString && this.URLString.length) {
			this.processURLString(this.URLString, true);
		}

		if (urlstring) {
			if (this.URLString.length) {
				this.URLString += this.argumentSeparator + urlstring;
			} else {
				this.URLString = urlstring;
			}
		}

		// prevents caching of URLString
		this.setVar("rndval", new Date().getTime());

		urlstringtemp = new Array();
		for (key in this.vars) {
			if (false == this.vars[key][1] && true == this.encodeURIString) {
				encoded = this.encVar(key, this.vars[key][0], true);
				delete this.vars[key];
				this.vars[encoded[0]] = Array(encoded[1], true);
				key = encoded[0];
			}

			urlstringtemp[urlstringtemp.length] = key + "=" + this.vars[key][0];
		}
		if (urlstring){
			this.URLString += this.argumentSeparator + urlstringtemp.join(this.argumentSeparator);
		} else {
			this.URLString += urlstringtemp.join(this.argumentSeparator);
		}
	}

	this.runResponse = function() {
		eval(this.response);
	}

	this.runAJAX = function(urlstring) {
		if (this.failed) {
			this.onFail();
		} else {
			this.createURLString(urlstring);
			if (this.element) {
				this.elementObj = document.getElementById(this.element);
			}
			if (this.xmlhttp) {
				var self = this;
				if (this.method == "GET") {
					totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString;
					this.xmlhttp.open(this.method, totalurlstring, true);
				} else {
					this.xmlhttp.open(this.method, this.requestFile, true);
					try {
						this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
					} catch (e) { }
				}

				this.xmlhttp.onreadystatechange = function() {
					switch (self.xmlhttp.readyState) {
						case 1:
							self.onLoading();
							break;
						case 2:
							self.onLoaded();
							break;
						case 3:
							self.onInteractive();
							break;
						case 4:
							self.response = self.xmlhttp.responseText;
							self.responseXML = self.xmlhttp.responseXML;
							self.responseStatus[0] = self.xmlhttp.status;
							self.responseStatus[1] = self.xmlhttp.statusText;

							if (self.execute) {
								self.runResponse();
							}

							if (self.elementObj) {
								elemNodeName = self.elementObj.nodeName;
								elemNodeName.toLowerCase();
								if (elemNodeName == "input"
								|| elemNodeName == "select"
								|| elemNodeName == "option"
								|| elemNodeName == "textarea") {
									self.elementObj.value = self.response;
								} else {
									self.elementObj.innerHTML = self.response;
								}
							}
							if (self.responseStatus[0] == "200") {
								self.onCompletion();
							} else {
								self.onError();
							}

							self.URLString = "";
							break;
					}
				};

				this.xmlhttp.send(this.URLString);

 

Zaloguj lub zarejestruj się, aby odpowiedzieć na to pytanie.

Podobne pytania

+1 głos
0 odpowiedzi 256 wizyt
pytanie zadane 16 lutego 2022 w JavaScript przez Grzegorz Mikina Dyskutant (8,060 p.)
0 głosów
0 odpowiedzi 136 wizyt
pytanie zadane 1 września 2017 w JavaScript przez paciek Początkujący (480 p.)
+1 głos
0 odpowiedzi 708 wizyt
pytanie zadane 30 sierpnia 2017 w PHP przez chmod96 Obywatel (1,380 p.)

92,454 zapytań

141,263 odpowiedzi

319,099 komentarzy

61,854 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...