Autor Zpráva
leonek
Profil
Dobrý den,

vymyslel jsem takovou blbůstku do mého redakčního systému na produkty v databázi.
Mám tabulku ve které mám sloupec 'poradi'. Podle tohoto sloupce se řadí výsledky v tabulce na webu společnosti.
Já jsem si ale řekl že upravovat pořadí po jednom je nebezpečné kvůli duplicitě. Tak jsem na to udělal zvlášť skript
aby uživatel zvolil pořadí záznamů na výstupu u všech záznamů najednou.
Samozřejmě to mám ošetřené v php ale já bych chtěl aby ty hodnoty nešly odeslat natož zpracovat.
To jsem chtěl docílit pomocí JS ale jsem v něm teprv začátečník. Syntaxe je sice podobná jako php ale pořád s tím nějak válčím.

Napsal jsem toto:
<script language = \"javascript\">
function Kontrola(){
    var a = ".$js1."+1;
        for(var i = 1; i < a; i++){
        var l += parseInt(document.getElementById(i));
    }
  if(l != ".$js1."){
    alert(\"POZOR! Pořadí není zapsáno správně!\");  
    }
return true;         
    }
</script>

Mělo by to sečíst hodnoty ze všech inputů a porovnat výsledek s počtem řádků v tabulce.

Děkuji
SeparateSK
Profil
Chýba ti tu .innerHTML:
var l += parseInt(document.getElementById(i).innerHTML);
innerHTML použiješ keď načítaš obsah hocičoho iného ako nejakého prvku, kam text zadávaš
value použiješ vtedy keď chceš dostať napr zadaný text do inputu
lebo bez toho to nevie, čo to má vlastne pripočítať.
document.getElementById(i); znamená len nejaký HTML prvok s istým ID - nie jeho obsah
leonek
Profil
Mělo by to sebrat údaje ze všech inputů, které mají v id hodnotu 1 až $js1 a porovnat součet všech těchto inputů s hodnotou $js1.

SeparateSK:
Po úpravě stále nefunguje:

<script language = \"javascript\">
function Kontrola(){
    var a = ".$js1."+1;
        for(var i = 1; i < a; i++){
        var l += parseInt(document.getElementById(i).value);
    }
  if(l != ".$js1."){
    alert(\"POZOR! Pořadí není zapsáno správně!\");
    return false;  
    }
return true;         
    }
</script>
Tori
Profil
leonek:
function Kontrola(){
  var l = 0;
  // ....
    l += parseInt(document.getElementById(i).value);
Na čem závisí / co představuje PHP proměnná $js - jestli to je počet inputů, tak by šlo procházet prostě všechny inputy z formuláře/stránky a porovnávat začátek ID nebo name.
leonek
Profil
Poslední úprava dle Toriho stále nefunguje:

<script language = \"javascript\">
function Kontrola(){
    var l = 0;
    var a = ".$js1."+1;
        for(var i = 1; i < a; i++){
        var l += parseInt(document.getElementById(i).value);
    }
  if(l != ".$js1."){
    alert(\"POZOR! Pořadí není zapsáno správně!\");
    return false;  
    }
return true;         
    }
</script>



Jsem v JS vcelku začátečník. Pokud někdo vymyslí lepší řešení (není to nic složitého), uvítám i jiný návrh plnící stejnou funkci.
V podstatě jde jen o to (opakuji), že potřebuji aritmetický součet hodnot inputů a porovnat ho s hodnotou $js1 (doplněno php kódem).


Bohužel atribut name nemohu použít z důvodu zainteresování do php kódu, který hodnoty zpracovává. Proměnná $js1 je počet řádků vypsaných databází.
SeparateSK
Profil
Tu je príklad aj s inputmi:
<script language = "javascript">
function Kontrola(){
    var a = 5+1;
    var l=0;
    for(var i = 1; i < a; i++){
        l += parseInt(document.getElementById(i).value);
    }
    //alert(l);
    if(l != 5){
        alert("POZOR! Pořadí není zapsáno správně!");
        return false;  
    }
    return true;         
}
</script>
<input id="1">
<input id="2">
<input id="3">
<input id="4">
<input id="5">
<button onclick="Kontrola()">OK</button>
Takže keď do všetkých inputov zadám 1, ich súčet je 5 a je ich dokopy 5, tak neda hlasku ze : "POZOR! Pořadí není zapsáno správně!"
Ale ak to prveho zadam 2 a do ostatnych 1, tak sucet je 6(2+1+1+1+1) a inputov je 5 ,tak to vyhodi hlasku : "POZOR! Pořadí není zapsáno správně!"
Taketo nieco chces?
leonek
Profil
Teď to zase vyhazuje hlášku pořád. Ať do inputů zadám cokoliv (nebo je nechám v původním stavu - do value nechávám vypisovat původní hodnoty).
<script language = "javascript">
function Kontrola(){
    var l = 0;
    var a = 36+1;
        for(var i = 1; i < a; i++){
        l += parseInt(document.getElementById(i).value);
    }
  if(l != 36){
    alert("POZOR! Pořadí není zapsáno správně!");
    return false;  
    }
return true;         
    }
</script>



Hotovo, problém vyřešen. Fungující kód:

<script language = \"javascript\">
function Kontrola(){
    var l = 0;
    var a = ".$js1."+1;
        for(var i = 1; i < a; i++){
        l += parseInt(document.getElementById(i).value);
    }
  if(l != ".$soucet."){
    alert(\"POZOR! Pořadí není zapsáno správně!\");
    return false;  
    }
return true;         
    }
</script>

Proměnná $soucet je matematický součet pořadí.

Všem děkuji za pomoc... :-)

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: