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.
19 svar · 1 789 visningar · startad av bikic
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.
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.
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>
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.
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:
Det kan se lite rörigt ut nu när jag klistra in det.
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.
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.
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".
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);
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.
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/
Märkligt.
Jag får faktiskt inte scriptet att fungera. Jag får inget värde i selectboxen "fldAmount"
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.
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?
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 '.
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 ;)
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.
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!
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.