Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    Errore su uno script, problema con campi xxx[ ]

    Ho bisogno di avere dei campi di un modulo con nome tipo xxx[ ]... come faccio a costruire una funzione per controllarli?

    Questa nn va...

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

    <HTML>
    <HEAD>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
    <script type="text/javascript">
    <!--
    function Modulo() {
    if (document.modulo.brands[].value == "") {
    alert("Devi specificare la marca del prodotto.");
    document.modulo.brands[].focus();
    return false;
    }
    if (document.modulo.models[].value == "") {
    alert("Devi specificare il modello del prodotto.");
    document.modulo.models[].focus();
    return false;
    }
    if (document.modulo.short_descs[].value == "") {
    alert("Devi inserire una breve descrizione del prodotto.");
    document.modulo.short_descs[].focus();
    return false;
    }
    if (document.modulo.descriptions[].value == "") {
    alert("Devi inserire una descrizione del prodotto.");
    document.modulo.descriptions[].focus();
    return false;
    }
    if (document.modulo.prices[].value == "") {
    alert("Devi inserire il prezzo del prodotto.");
    document.modulo.prices[].focus();
    return false;
    }
    if (!document.modulo.prices[].value.match(/^(\d*?)(\,\d{2})?$/)) {
    alert("Il prezzo del prodotto deve essere in uno dei seguentei formati: 10 o 10,00.");
    document.modulo.prices[].focus();
    return false;
    }
    if (document.modulo.discounts[].value!="" && !document.modulo.discounts[].value.match(/^(\d*?)(\,\d{2})?$/)) {
    alert("Lo sconto del prodotto deve essere in uno dei seguentei formati: 10 o 10,00.");
    document.modulo.discounts[].focus();
    return false;
    }
    document.modulo.action = "edit.php?action=p_e";
    document.modulo.submit();
    }
    //-->
    </script>
    </HEAD>
    <BODY>

    <FORM name="modulo" method="POST">



    *****

    <INPUT type="hidden" name="ids[]" value="12">
    Marca*: <INPUT type="text" name="brands[]" maxlength="128" value="p">

    Modello*: <INPUT type="text" name="models[]" maxlength="128" value="p">

    Descrizione breve*: <INPUT type="text" name="short_descs[]" maxlength="128" value="p">(Max 128 caratteri)

    Descrizione*: <TEXTAREA name="descriptions[]" rows="4" cols="15">p</TEXTAREA>

    Prezzo*: <INPUT type="text" name="prices[]" value="10">

    Sconto: <INPUT type="text" name="discounts[]" value="">

    Immagine

    Disponibilità: <INPUT type="text" name="availabilitys[]" value="100">

    Categoria*: <SELECT name="categorias[]">
    <OPTION value="8">giocattoli
    <OPTION value="4">informatica
    <OPTION selected value="3">telefonia
    </SELECT>

    *****</P>

    <INPUT type="button" value="Conferma" onClick="Modulo()"><INPUT type="reset" value="Annulla">
    </FORM>

    </BODY>
    </HTML>

  2. #2
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Prova a mettere [0] ovunque hai []

    Infatti c'è comunque un errore
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  3. #3
    Utente di HTML.it L'avatar di badaze
    Registrato dal
    Jun 2002
    residenza
    Lyon
    Messaggi
    5,372
    Aggiungendo un id uguale al name funziona

    Marca*: <INPUT type="text" name="brands[0]" id="brands[0]" maxlength="128" value="p">


    La funzione di controllo deve comunque essere modificata

    codice:
    if (document.getElementById('brands[0]').value == "") { 
     alert("Devi specificare la marca del prodotto."); 
     document.getElementById('brands[0]').focus(); 
     return false; 
    }
    Ridatemi i miei 1000 posts persi !!!!
    Non serve a nulla ottimizzare qualcosa che non funziona.
    Cerco il manuale dell'Olivetti LOGOS 80B - www.emmella.fr

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Non ho letto la domanda, ma dal titolo credo di aver capito.

    Se hai un campo del tipo:
    <input type="..." name="xyz[]" ...>
    (che serve per farlo interpretare da PHP come un vettore)

    nel JS al posto di scrivere:
    document.NOMEFORM.NOMECAMPO....
    devi mettere:
    document.NOMEFORM.elements['NOMECAMPO']...

    PS: attenzione ai nomi uguali:
    Modulo e modulo potrebbero essere interpretati come lo stesso oggetto, in qualche browser in cui JS non e` case-sensitive
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  5. #5
    Ho risolto il problema se nella pagina c'è un solo blocco di campi, ma se nella medesima pagina ci sono più blocchi che si ripetono lo script non funziona... penso di aver capito perchè ma non riesco a trovarmi con la sintassi..

    Ecco il codice funzionante con un blocco ma non con due (come in questo caso):


    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

    <HTML>
    <HEAD>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
    <script type="text/javascript">
    <!--
    function Modulo() {
    if (document.modulo.elements['brands[]'].value == "") {
    alert("Devi specificare la marca del prodotto.");
    document.modulo.elements['brands[]'].focus();
    return false;
    }
    if (document.modulo.elements['models[]'].value == "") {
    alert("Devi specificare il modello del prodotto.");
    document.modulo.elements['models[]'].focus();
    return false;
    }
    if (document.modulo.elements['short_descs[]'].value == "") {
    alert("Devi inserire una breve descrizione del prodotto.");
    document.modulo.elements['short_descs[]'].focus();
    return false;
    }
    if (document.modulo.elements['descriptions[]'].value == "") {
    alert("Devi inserire la descrizione del prodotto.");
    document.modulo.elements['descriptions[]'].focus();
    return false;
    }
    if (document.modulo.elements['prices[]'].value == "") {
    alert("Devi inserire il prezzo del prodotto.");
    document.modulo.elements['prices[]'].focus();
    return false;
    }
    if (!document.modulo.elements['prices[]'].value.match(/^(\d*?)(\,\d{2})?$/)) {
    alert("Il prezzo del prodotto deve essere in uno dei seguentei formati: 10 o 10,00.");
    document.modulo.elements['prices[]'].focus();
    return false;
    }
    if (document.modulo.elements['discounts[]'].value!="" && !document.modulo.elements['discounts[]'].value.match(/^(\d*?)(\,\d{2})?$/)) {
    alert("Lo sconto del prodotto deve essere in uno dei seguentei formati: 10 o 10,00.");
    document.modulo.elements['discounts[]'].focus();
    return false;
    }
    document.modulo.action = "edit.php?action=p_e";
    document.modulo.submit();
    }
    //-->
    </script>
    </HEAD>
    <BODY>

    <FORM name="modulo" method="POST">



    *****

    <INPUT type="hidden" name="ids[]" value="2">
    Marca*: <INPUT type="text" name="brands[]" maxlength="128" value="Motorola">

    Modello*: <INPUT type="text" name="models[]" maxlength="128" value="V3">

    Descrizione breve*: <INPUT type="text" name="short_descs[]" maxlength="128" value="tri band, MMS, fotocamera">(Max 128 caratteri)

    Descrizione*: <TEXTAREA name="descriptions[]" rows="4" cols="15">Cellulare tri band con fotocamera, MMS, questo e quell'altro..</TEXTAREA>

    Prezzo*: <INPUT type="text" name="prices[]" value="300">

    Sconto: <INPUT type="text" name="discounts[]" value="">

    Immagine

    Disponibilità: <INPUT type="text" name="availabilitys[]" value="100">

    Categoria*: <SELECT name="categorias[]">
    <OPTION value="8">giocattoli
    <OPTION value="4">informatica
    <OPTION selected value="3">telefonia
    </SELECT>

    *****</P>


    *****

    <INPUT type="hidden" name="ids[]" value="12">
    Marca*: <INPUT type="text" name="brands[]" maxlength="128" value="p">

    Modello*: <INPUT type="text" name="models[]" maxlength="128" value="p">

    Descrizione breve*: <INPUT type="text" name="short_descs[]" maxlength="128" value="p">(Max 128 caratteri)

    Descrizione*: <TEXTAREA name="descriptions[]" rows="4" cols="15">p</TEXTAREA>

    Prezzo*: <INPUT type="text" name="prices[]" value="10">

    Sconto: <INPUT type="text" name="discounts[]" value="">

    Immagine

    Disponibilità: <INPUT type="text" name="availabilitys[]" value="100">

    Categoria*: <SELECT name="categorias[]">
    <OPTION value="8">giocattoli
    <OPTION value="4">informatica
    <OPTION selected value="3">telefonia
    </SELECT>

    *****</P>

    <INPUT type="button" value="Conferma" onClick="Modulo()"><INPUT type="reset" value="Annulla">
    </FORM>

    </BODY>
    </HTML>

  6. #6
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Se ci sono due o piu` campi con lo stesso nome, formano una collezione, che si legge da JS tramite un vettore:

    il primo:
    if (document.modulo.elements['brands[]'][0].value == "") {

    il secondo:
    if (document.modulo.elements['brands[]'][1].value == "") {

    ...

    Naturalmente puoi fare un loop; il valore dentro la quadra e` un numero:
    codice:
    var bb = document.modulo.elements['brands[]'];
    for(var i=0; i<bb.length; i++) {
      if(bb[i].value == "") {
        ...
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

  7. #7
    Ora sì che cammina, grazie!


  8. #8
    Ho scoperto un brutto inconveniente... funziona con più blocchi di input ma non con uno solo come in questo caso!!!

    Perchè? Sto impazzendo!!!




    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">

    <HTML>
    <HEAD>
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
    <script type="text/javascript">
    <!--
    function Control(){
    var brands = document.modulo.elements['brands[]'];
    for(var i=0; i<brands.length; i++) {
    if (brands[i].value==""){
    alert("Devi specificare la marca del prodotto.");
    brands[i].focus();
    return false;
    }
    }
    var models = document.modulo.elements['models[]'];
    for(var i=0; i<models.length; i++) {
    if (models[i].value==""){
    alert("Devi specificare il modello del prodotto.");
    models[i].focus();
    return false;
    }
    }
    var short_descs = document.modulo.elements['short_descs[]'];
    for(var i=0; i<short_descs.length; i++) {
    if (short_descs[i].value==""){
    alert("Devi inserire una breve descrizione del prodotto.");
    short_descsi[i].focus();
    return false;
    }
    }
    var descriptions = document.modulo.elements['descriptions[]'];
    for(var i=0; i<descriptions.length; i++) {
    if (descriptions[i].value==""){
    alert("Devi inserire la descrizione del prodotto.");
    descriptions[i].focus();
    return false;
    }
    }
    var prices = document.modulo.elements['prices[]'];
    for(var i=0; i<prices.length; i++) {
    if (prices[i].value==""){
    alert("Devi inserire il prezzo del prodotto.");
    prices[i].focus();
    return false;
    }
    if (!prices[i].value.match(/^(\d*?)(\,\d{2})?$/)) {
    alert("Il prezzo del prodotto deve essere in uno dei seguentei formati: 10 o 10,00.");
    prices.focus();
    return false;
    }
    }
    var discounts = document.modulo.elements['discounts[]'];
    for(var i=0; i<discounts.length; i++) {
    if (discounts[i].value!="" && !discounts[i].value.match(/^(\d*?)(\,\d{2})?$/)) {
    alert("Lo sconto del prodotto deve essere in uno dei seguentei formati: 10 o 10,00.");
    discounts.focus();
    return false;
    }
    }

    document.modulo.action = "edit.php?action=p_e";
    document.modulo.submit();
    }
    //-->
    </script>
    </HEAD>
    <BODY>

    <FORM name="modulo" method="POST">



    *****

    <INPUT type="hidden" name="ids[]" value="12">
    Marca*: <INPUT type="text" name="brands[]" maxlength="128" value="p">

    Modello*: <INPUT type="text" name="models[]" maxlength="128" value="">

    Descrizione breve*: <INPUT type="text" name="short_descs[]" maxlength="128" value="p">(Max 128 caratteri)

    Descrizione*: <TEXTAREA name="descriptions[]" rows="4" cols="15"></TEXTAREA>

    Prezzo*: <INPUT type="text" name="prices[]" value="0">

    Sconto: <INPUT type="text" name="discounts[]" value="">

    Immagine

    Disponibilità: <INPUT type="text" name="availabilitys[]" value="100">

    Categoria*: <SELECT name="categorias[]">
    <OPTION value="8">giocattoli
    <OPTION value="4">informatica
    <OPTION selected value="3">telefonia
    </SELECT>

    *****</P>
    <INPUT type="button" value="Conferma" onClick="Control()">
    <INPUT type="reset" value="Annulla">
    </FORM>

    </BODY>
    </HTML>

  9. #9
    Penso di aver determinato l'errore ma non so come risolverlo;

    Analizzando il seguente codice:

    function Control(){
    var brands = document.modulo.elements['brands[]'];
    for(var i=0; i<brands.length; i++) {
    if (brands[i].value==""){
    alert("Devi specificare la marca del prodotto.");
    brands[i].focus();
    return false;
    }
    }


    Succede che se document.modulo.elements['brands[]'] ritorna un array tutto funziona ma se brands[] compare una sola volta nel form, allora tale funzione non è in grado di ritornare nulla... come si può risolvere questo problema?


  10. #10
    Utente di HTML.it
    Registrato dal
    Sep 2001
    Messaggi
    21,188
    Devi mettere un if ulteriore:
    codice:
    function Control(){
      var brands = document.modulo.elements['brands[]'];
      if(brands.length) {
        for(var i=0; i<brands.length; i++) {
          if (brands[i].value==""){
            alert("Devi specificare la marca del prodotto.");
            brands[i].focus();
            return false;
          }
        }
      } else {
        if (brands.value==""){
          alert("Devi specificare la marca del prodotto.");
          brands.focus();
          return false;
        }
      }
    }
    Nuova politica di maggiore severita` sui titoli delle discussioni: (ri)leggete il regolamento
    No domande tecniche in messaggi privati

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.