webForumDet fria alternativet

Checka värde från innerHTML mot value i en selectbox

19 svar · 1 789 visningar · startad av bikic

bikicMedlem sedan juni 2006261 inlägg
#1

Hej alla,

jag har ett värde (tal) i en div som heter "lager". Denna div ska checkas mot en selectbox som heter amount.

Jag trodde det var så enkelt att göra:

if (document.getElementById("lager").innerHTML < document.getElementById("Amount").value)

Men det verkar inte fungera.

voigtann1Medlem sedan juni 20019 519 inlägg
#2

vad innehåller dom? innerHTML ta även whitespace

if (document.getElementById("lager").innerHTML.replace(/\s/g,"") < document.getElementById("Amount").value)

kanske hjälper... men behöver veta vad båda objekten innehåller.

bikicMedlem sedan juni 2006261 inlägg
#3

Lager kan innehålla en siffra, vilken som helst, säg 5 i detta fall.

Amount hämtas som ett värde ur en option från en selectbox.

<div id="lager">5</div>

<select>
<option value="10">10</option>
<option value="20">20</option>
</select>

voigtann1Medlem sedan juni 20019 519 inlägg
#4

kolla vad den innehåller, använd firebug och kolla vad värdet är, är det "5" eller är det " 5 " så är det en stor skillnad.

För övrigt så kan jag tykca att lager information bör ligga i ett javascripts objekt än att hämta värden ifrån html struktur.

if (+document.getElementById("lager").innerHTML < +document.getElementById("Amount").value)

bör också fungera, även om det inte är så hyper snygg lösning.

bikicMedlem sedan juni 2006261 inlägg
#5

Saken är den att det är en liten del i ett stort script och detta är det enda som spökar just nu. Har du tid att kolla på det så är jag för evigt tacksam.

<script type="text/javascript">

	function populateCostcenterCombobox(form) {
					
		var data;
		var xCostcenterArray = new Array();
     
		var myindex  = form.fldProductID.selectedIndex
		var productID = form.fldProductID.options[myindex].value

		data = AJAX_hentCostcenter(productID);
     
		xCostcenterArray = data.split(";");

		var sel = document.getElementById("fldAmount")
		var saldo = document.getElementById("lager")

		sel.options.length = 0;

		sel.options[sel.options.length] = new Option("0", "0"); 

		xInterval = xCostcenterArray[0];
		xMaxInterval = 100;
		xMaxValue = 101;
     
		for ( var i=1, len=xCostcenterArray.length; i<=xMaxInterval; i++ ){					
          		xInterval = xCostcenterArray[0] * i;
			if (xMaxValue <= xInterval) 
				break;
          		sel.options[sel.options.length] = new Option(xInterval, xInterval); 
  			saldo.innerHTML= xCostcenterArray[1];
     
     		}
   
    		return true;
	}

	function checkLager() {

		if (document.getElementById("lager").innerHTML < document.getElementById("Amount").value) {
			document.getElementById("submit_button").style.display ="inline"; 
		}
		else
			document.getElementById("submit_button").style.display ="none"; 
	}

	function AJAX_hentCostcenter(productID) {

 		var temp;
		var xResultat = "";
		var xStatistikkArray = new Array();
     
		// For IE7 eller nyere ...
		if (window.XMLHttpRequest) {
			xmlhttp = new XMLHttpRequest();      
		}

     		// For IE6 eller eldre ..
		else {
				xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");   
     		}

     		xmlhttp.open("GET", "select.asp?productID="+productID, false);
     		xmlhttp.send(null);
     
		temp = xmlhttp.responseText;
     
    		return temp;
     
	}
							
</script>

Första select:

<select style="width:200px;" name="fldProductID" id="fldProductID" onchange="populateCostcenterCombobox(this.form);">

Lagerkoll:

<span id="lager"></span>

Andra select:

<select style="width:100px;" id="fldAmount" name="fldAmount" onchange="checkLager();"></select>

Så här ska det fungera:

  1. Man väljer först en produkt i selectboxen (fldProductID)
  2. productID skickas till filen select.asp som fångar upp två värden - interval och lagersaldo - vilket returneras ex. 10;56
  3. Därefter visas antalet produkter man kan välja i selectboxen (fldAmount)
  4. Om du här väljer ett värde som är mindre än lagersaldot så ska submitknappen synas, annars inte.

Det kan se lite rörigt ut nu när jag klistra in det.

voigtann1Medlem sedan juni 20019 519 inlägg
#6

Konstig kod.... få du ens svar från din AJAX callback innan du försöker köra split den? Sen lägger du variabel globalt, vilket känns inte helt optimalt heller.

Mitt tips är att göra om det mesta i koden, du kör ju med jquery redan (om du inte ha gått ifrån det), kör mot det istället.

Annars bygg om din ajax kod att ha en Callback funktion som körs först när du ha fått en respons från servern.

bikicMedlem sedan juni 2006261 inlägg
#7

Om jag ska vara ärlig så är detta en kod jag fick av en kollega för att få bukt med en auto populate select box - kanske inte den bästa och snyggaste koden men den fungerar. Om du har lust att hjälpa mig så vore jag väldigt tacksam.

bikicMedlem sedan juni 2006261 inlägg
#8

Har testat här nu på morgonen men får det inte riktigt till att fungera.


<script type="text/javascript">
	$(function(){
		$("#fldProductID").change(function(){
			$.getJSON("select.asp",{id: $(this).val()}, function(j){
				var options = '';
				for (var i = 0; i < j.length; i++) {
					options += '<option value="' + j[i].optionValue + '">' + j[i].optionDisplay + '</option>';
				}

				$("#fldAmount").html(options);
				$('#fldAmount option:first').attr('selected', 'selected');
			});
		});			
	});
</script>

<select id="fldProductID">
	<option value="0" selected>Choose a product...</option>
	<option value="1">Produkt 1</option>
	<option value="2">Produkt 2</option>
	<option value="3">Produkt 3</option>
	<option value="4">Produkt 4</option>				
</select>

<select id="fldAmount"></select>

I select.asp-filen kan det se ut så här:

[{optionValue:10, optionDisplay: '10'}, {optionValue:20, optionDisplay: '20'}, {optionValue:30, optionDisplay: '30'}, {optionValue:40, optionDisplay: '40'}, {optionValue:50, optionDisplay: '50'}, {optionValue:60, optionDisplay: '60'}, {optionValue:70, optionDisplay: '70'}, {optionValue:80, optionDisplay: '80'}, {optionValue:90, optionDisplay: '90'}, {optionValue:100, optionDisplay: '100'}]

Problemet är att jag inte får in värderna i selectboxen "fldAmount".

voigtann1Medlem sedan juni 20019 519 inlägg
#9

Det du skickar är inte ett JSON objekt, debugar jquery så få du ett error när den försöker köra parse JSON
edit:

Important: As of jQuery 1.4, if the JSON file contains a syntax error, the request will usually fail silently. Avoid frequent hand-editing of JSON data for this reason. JSON is a data-interchange format with syntax rules that are stricter than those of JavaScript's object literal notation. For example, all strings represented in JSON, whether they are properties or values, must be enclosed in double-quotes. For details on the JSON format, see http://json.org/.

alla propertys måste ha " runt sig och inte bara vara tom:

[{"optionValue":10, "optionDisplay": 10}, {"optionValue":20, "optionDisplay": 20}, {"optionValue":30, "optionDisplay": 30}, {"optionValue":40, "optionDisplay": 40}, {"optionValue":50, "optionDisplay": 50}, {"optionValue":60, "optionDisplay": 60}, {"optionValue":70, "optionDisplay": 70}, {"optionValue":80, "optionDisplay": 80}, {"optionValue":90, "optionDisplay": 90}, {"optionValue":100, "optionDisplay": 100}]

skriv om:

$("#fldAmount").html(options);
				$('#fldAmount option:first').attr('selected', 'selected');

dock, onödigt att hämta #fldAmont 2 ggr räcker att du hämta den en gång:

$("#fldAmount").html(options).filter("option:first").attr("selected",true);
bikicMedlem sedan juni 2006261 inlägg
#10

Vad ska jag använda istället för JSON då? Jag har testat med dubbelfnuttar men det fungerar inte, verkar vara något med 1.4 versionen av jquery,

ladda ner utvecklingskoden för jquery och lägg debug i firebug och se vad som händer med din kod.

voigtann1Medlem sedan juni 20019 519 inlägg
#11

Använd dig av JSON, men enligt spec så är inte:

[{optionValue:10, optionDisplay: '10'}, {optionValue:20, optionDisplay: '20'}, {optionValue:30, optionDisplay: '30'}, {optionValue:40, optionDisplay: '40'}, {optionValue:50, optionDisplay: '50'}, {optionValue:60, optionDisplay: '60'}, {optionValue:70, optionDisplay: '70'}, {optionValue:80, optionDisplay: '80'}, {optionValue:90, optionDisplay: '90'}, {optionValue:100, optionDisplay: '100'}]

ett JSON objekt. jag har absolut inga problem att köra skriptet efter den är omskriven.

inga problem med 1.4 heller: http://voigt.se/sandbox/wf/bikic/dropbox/

bikicMedlem sedan juni 2006261 inlägg
#12

Märkligt.

Jag får faktiskt inte scriptet att fungera. Jag får inget värde i selectboxen "fldAmount"

voigtann1Medlem sedan juni 20019 519 inlägg
#13

Lägg upp din kod så man få köra den, för har absolut inga problem alls att köra den när man ha ett korrekt JSON objekt från servern.

Fredde MannenMedlem sedan nov. 20014 054 inlägg
#14

bikic skrev:

Märkligt.

Jag får faktiskt inte scriptet att fungera. Jag får inget värde i selectboxen "fldAmount"

Hur ser din JSON-sträng ut som returneras?

bikicMedlem sedan juni 2006261 inlägg
#15

Fick det till att fungera utan att egentligen veta vad jag gjorde ;)

Aja, tack för hjälpen!

voigtann1Medlem sedan juni 20019 519 inlägg
#16

bikic skrev:

Fick det till att fungera utan att egentligen veta vad jag gjorde ;)

Du MÅSTE ha gjort det jag skrev, propertys med " och inte köra med '.

bikicMedlem sedan juni 2006261 inlägg
#17

Du kanske kan svara på en annan sak som har med scriptet att göra.

Jag loopar ut värderna i select.asp med hjälp av en for loop. Jag vill kunna loppa ut allt innehåll med en liten justering på sista posten. Med en vanlig Loop-sats går detta utmärkt, men i en for vette fan ;)

voigtann1Medlem sedan juni 20019 519 inlägg
#18

Kod tack

Edit:

Är det ASP du menar nu? Beroende på vad det är för loop du kör så kan du ju alltid kolla om den är klar, om den inte är det lägg till "," annars inte, eller så plockar du bort "," i slutet av en sträng innan du kör en response.write på den.

bikicMedlem sedan juni 2006261 inlägg
#19

Hej,

Så här ser loopen ut - jätteenkelt ;)

xMaxInterval = 100			
				
For i = 1 To xMaxInterval

	Response.Write "något värde, "
								
Next

Vad jag vill är att kommatecknet ska försvinna vid sista posten. Detta är enkelt om man kör en vanlig Loop, med movenext osv. Men här får jag det inte till att fungera.

Tacksam för svar!

voigtann1Medlem sedan juni 20019 519 inlägg
#20

Kolla om i är xMaxInterval, om det inte är det så lägg till , annars inte, annars så spara allt i en sträng och inte response.write för varje loop, då kan du manipulera strängen innan du visar den.

138 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
136 ms — hämta tråd, inlägg och bilagor (db)