Geechode waarde in javascript met aanhalingstekens wil geen getal zijn.

Status
Niet open voor verdere reacties.
Bedankt voor de precisering. Ik heb nu Number gebruikt om te verzekeren, dat de javascriptvariabele een getal is en dat gecontroleerd met typeof. Als volgt:
Code:
 lp = Number("<?php echo $_POST['lingvoLZ']; ?>");
	alert("Number = " + typeof lp);
	Eurlingvo  += lp;
	alert("Eurlingvo = " + typeof Eurlingvo);
Dat klopt allemaal, maar het probleem zit daarna.

In het formulier, HTML-gedeelte, zit een variabele met de naam lingvorezulto.
De naam van het formulier is lE. Ik geef via javascript aan die variabele de getalwaarde Eurlingvo, als volgt:
Code:
lE.lingvorezulto.value = Eurlingvo + “tekst”;
Die waarde hoort terug te komen in het element
<input name="lingvorezulto" value="……" />, maar ik krijg NaN + “tekst”.
Verliest Eurlingvo zijn getalkarakter weer door combinatie met tekst? Hoe kan ik dat voorkomen?
 
Laatst bewerkt:
Een getal hoort niet tussen quotes, dus die quotes in je aanroep van je Number()-functie mogen er uit.
Kijk eens in de HTML-source of je PHP-script die waarde geeft.
 
Verliest Eurlingvo zijn getalkarakter weer door combinatie met tekst?
Ja, want je combineert een getal met een string met als resultaat een string.
Op zich moet dit zelfs omdat de <input> met een string werkt.
Hieronder info waarvan je het meeste al weet denk ik.
Code:
<form id="lE" name = "lE" action="..." method="...">
  <input type="text" name="lingvorezulto" value="12">
</form>
<script>
// de volgende regel werkt niet, er kunnen meerdere name='lE' zijn
// var lE = document.getElementsByName('lE');
// de volgende twee werken wel, niet prettig leesbaar, fouten kunnen ontstaan
// var lE = document.forms[0];
// var lE = document.getElementsByName('lE')[0];
// de volgende is de beste manier, goed leesbaar, je voorkomt fouten
var lE = document.getElementById('lE');
// de <input> geeft een string, zelfs als je een getal invult
console.log(lE.lingvorezulto.value);
var Eurlingvo;
// als je de comments hieronder weghaalt is de variabele niet undefined
//Eurlingvo = 789;
if (Eurlingvo === undefined) {
  Eurlingvo = '?? ';
}
lE.lingvorezulto.value = Eurlingvo + "tekst"; // string
</script>
Suc6. Have fun.
 
Is het de bedoeling, dat ik je oefenscript in de body zet en dan, door achtereenvolgens de comment-tekens weg te halen, de juistheid van je beweringen controleer?
Dat lukt natuurlijk met //Eurlingvo = 789;
De andere beweringen denk ik te snappen, maar wat ik met
Code:
// de <input> geeft een string, zelfs als je een getal invult
console.log(lE.lingvorezulto.value);
var Eurlingvo;
aan moet, weet ik niet.
Ik heb het advies van PHP4U opgevolgd en de aanhalingstekens weggehaald:
Code:
lp = Number(<?php echo $_POST['lingvoLZ']; ?>);
maar dan krijg ik helemaal niks, wel een foutmelding op het <-teken achter "Number(".
Sorry, dat ik er kennelijk weinig van snap.
 
Laatst bewerkt:
Kijk eens in de HTML-source of je PHP-script die waarde geeft.
Het datatype in php wordt niet in javascript overgenomen
Code:
var value1 = <?php echo "123" ?>;   // in php een string, in js een getal
var value2 = "<?php echo 123 ?>";   // in php een getal, in js een string

Is het de bedoeling, dat ik je oefenscript in de body zet en dan, door achtereenvolgens de comment-tekens weg te halen, de juistheid van je beweringen controleer?
Dat lukt natuurlijk met //Eurlingvo = 789;
Een apart klein bestandje waarin je in de body snel even iets kan testen zal ik zeker aanbeveln.
je kan in de test van #23 van regel 11 even commentaar maken en dan achtereenvolgens regel 6, 8, 9 testen. Dit hoeft niet want het commentaar erbij spreekt voor zich. De volgende regels horen bij elkaar om te testen of Eurlingvo geen waarde heeft (let op: NaN is wel een waarde). Als Eurlingvo op zeker een geldige waarde heeft dan kan je de if() weglaten.
Code:
//Eurlingvo = 789;
if (Eurlingvo === undefined) {
}

maar het resultaat van
lE.lingvorezulto.value = Eurlingvo + “tekst”;
blijft NAN + "tekst".
Dan zal je terug moeten kijken in je script waarom Eurlingvo geen getal is.
De functie Number(...) geeft bijvoorbeeld NaN als de conversie niet lukt.
Voorbeeld: dit mag wel Number(" 1234 ") maar dit mag niet Number("12 34")
 
Laatst bewerkt:
Wat kan er aan de hand zijn, als
Code:
Number("<?php echo $_POST['lingvoLZ']; ?>");
NaN geeft, terwijl, naar mijn beste weten, de geposte variabele, lingvoLZ, een getalwaarde heeft?
 
Een paar regels om te testen en je weet het :d
Code:
<?php $_POST['lingvoLZ'] = " 1234.56  "; ?>
<script>
test = Number("<?php echo $_POST['lingvoLZ']; ?>");
console.log(typeof test + ':' + test);
</script>
Als $_POST['lingvoLZ'] een getal bevat dan is de JS variabele van type Number, je krijgt geen NaN.
Let op. Als je decimalen invoert dan moet dit met een punt, niet met een komma.
Als je zowel een punt als komma wilt gebruiken, dan wordt het
Code:
test = Number( ("<?php echo $_POST['lingvoLZ']; ?>").replace(',','.') );
 
Laatst bewerkt:
Misschien ben ik niet duidelijk geweest. Op
Code:
lp = Number("<?php echo $_POST['lingvoLZ']; ?>");
		alert("typeof lp = " + typeof lp);
		alert("lp = " + lp);
krijg ik als reactie: typeof lp = number, lp = NaN (NaN is een "number"!), terwijl
Code:
foreach ($_POST as $key => $value) {$inhoud .= "$key: $value\n";}; print $inhoud;
geeft: specifZ: specifZ ZamSubmit: submit ............. pI: it lingvoLZ: 6 .....................
Dus spaties, komma's o.i.d. komen niet voor.
Ik snap er werkelijk geen bal van.
De rol van
Code:
<?php $_POST['lingvoLZ'] = " 1234.56  "; ?>
<script>
test = Number("<?php echo $_POST['lingvoLZ']; ?>");
console.log(typeof test + ':' + test);
</script>
(en hoe ik het moet hanteren)
begrijp ik niet. "runnen" levert een leeg blad.
 
Er is een wonder gebeurd.
Code:
Number("<?php echo $_POST['lingvoLZ']; ?>");
is als getal te voorschijn gekomen en opgenomen in de variabele
Code:
lE.lingvorezulto.value = Eurlingvo + “tekst”;
De oorzaak moet te maken hebben met het feit, dat de php-oproep in javascript in een included javascript stond
(samen met een reeks andere soortgelijke variabelen).
Dat is kennelijk in de "flow"van PHP - HTML - included javascript niet toegestaan.
Als ik nu ook nog wist, hoe die flow precies te omschrijven, was ik nog een stuk verder.
Dank aan degenen, die (uiteindelijk) geen aanstoot nemen aan een eigennaamvariabele, omdat die toevallig geinspireerd is op een andere taal, want dat is discriminatie.
De leesbaarheid van de vraag hoeft er helemaal niet door in het gedrang te komen.
 
lp = Number("<?php echo $_POST['lingvoLZ']; ?>");
alert("typeof lp = " + typeof lp);
alert("lp = " + lp);
krijg ik als reactie: typeof lp = number, lp = NaN (NaN is een "number"!)
Klopt, je vraagt aan de functie Number() om iets om te zetten in een getal.
De functie Number() zegt 2 dingen tegen de vaiabele lp:
- je krijgt datatype number
- je krijgt de waarde NaN (omdat de functie Number() iets niet kan omzetten in een getal)

In jouw script: stel dat iemand HALLO invult in <input name="lingvoLZ">
Dit wordt in je script omgezet in lp = Number("HALLO");
lp is nu van datatype Number en heeft de waarde NaN (Not a Number).

foreach ($_POST as $key => $value) {$inhoud .= "$key: $value\n";}; print $inhoud;
Hier zet je, met bijvoorbeeld (int) of (float), niets om in datatype getal
Waarom doe je dit wel in Javascript?
 
Laatst bewerkt:
Dat is kennelijk in de "flow"van PHP - HTML - included javascript
Als iemand een pagina opvraagt
- wordt eerst op de webserver de PHP verwerkt.
Bijvoorbeeld <p><?php echo ("Hallo"); ?></p> wordt in de html <p>Hallo</p>
- dan wordt de pagina van de webserver naar de browser gestuurd
- dan wordt in de browser de rest van de code van boven naar beneden uitgevoerd.

Er zijn technieken (zoals AJAX) om vanuit JS met PHP te communiceren maar dat laat ik hier buiten.

Als je in Javascript verwijst naar een html element dan moet dat html element bekend zijn.
Dit is het makkelijkst te realiseren door Javascript onderaan te zetten, vlak boven </body> want dan is alle html bekend. Uitzondering hierop de function() want die wordt later pas aangeroepen. Functies mogen hogerop in de html staan.

Javascript in de browser kent géén include(...). PHP op de webserver kent wel include(...).
In PHP is ht gebruikelijk om alle include's bovenaan te zetten dan voorkom je rare dingen.
In Javascript is <script src="bestand.js"></script> het equivalent van PHP's include("bestand.php");

Suc6 met je script.
 
Laatst bewerkt:
Code:
Hier zet je, met bijvoorbeeld (int) of (float), niets om in datatype getal
Waarom doe je dit wel in Javascript?
De datatypes zijn, dacht ik, al bepaald door het verzendformulier. Dan hoeft er niets omgezet te worden.
Of begrijp ik je verkeerd?
 
Je krijgt in PHP via $_POST vanuit een formulier altijd een sting, ook als een getal wordt ingevuld in de <input>
Als je in PHP een getal wilt hebben dan zal je de sting moeten converteren met (int)$_POST['input'] of met (float)$_POST['input']
Het is wel slim om eerst te controleren of de sting een getal bevat met is_numeric(...). Alles bij elkaar is het:
Code:
<?php
if (isset($_POST['submit'])) {
  if (is_numeric($_POST['input'])) {
    echo 'input van formulier is ' . gettype( $_POST['input'] ) . '<br>';
    echo '(int)input is ' . gettype( (int)$_POST['input'] ) . '<br>';
    echo '(float)input is ' . gettype( (float)$_POST['input'] ) . '<br>';
  } else {
    echo 'Geen getal ingevoerd' . '<br>';
  }
}
?>
<br>
<form action="index.php" method="post">
  <input type="text" name="input" value="">
  <input type="submit" name="submit" value="Verstuur">
</form>

- aanvulling
Ook bij <input type="number" ....> krijg je een string. Het type=number is alleen bedoeld voor validatie.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan