[RISOLTO]Impostare focus su textbox dopo foreach

Emix

Utente Attivo
15 Feb 2010
594
0
16
Salve a tutti,
ho la necessità di far tornare il cursore del mouse su una determinata textbox dopo finita una foreach...

Il codice php è questo :

PHP:
<table>
<tr>
<td><input type="text" placeholder="Barcode" name="barcodeart_new" id="barcodeart" size="10" value="" class="barcode"></td> 
<td><input type="submit" class="visto" name="visto" value=""></td><td>
<input type="submit" name="creapdf"  value="CREA DDT" class="creaddt"></td></tr></table>
<table>
<tr> 
<td><input type="text" size="10" value="BARCODE"></td> 
<td><input type="text" size="50" value="DESCRIZIONE"></td> 
<td><input type="text" style="text-align:center" size="3" value="QNT"></td> 
<td><input type="text" size="5" value="PREZZO" ></td> 
</table> 
<?php  
include('connect.php');  
if(isset($_POST['barcodeart_new']) && !empty($_POST['barcodeart_new']))
    $query = 'SELECT * FROM articoli WHERE Barcode=\''.mysql_real_escape_string($_POST['barcodeart_new']).'\'';    //se i barcode sono interi, si possono evitare gli apici \'
else if(isset($_POST['barcodeart_vecchi'])&& !empty($_POST['barcodeart_vecchi']))
    $query = 'SELECT * FROM articoli WHERE 0 ';    //il WHERE 0 è una bruttura... se non funziona, si può cercar di far di meglio

if(isset($_POST['barcodeart_vecchi']))
    foreach($_POST['barcodeart_vecchi'] as $barcode)
        $query .= ' OR Barcode=\''.mysql_real_escape_string($barcode).'\' ';    //se i barcode sono interi, si possono evitare gli apici \'
if(isset($query))    
    $result = mysql_query($query) or die('Query failed: ' . mysql_error() . "<br />");
?> 
<table> 
<?php
if(isset($result))
{
    while($righi=mysql_fetch_array($result))
$barcodeart[$righi['Barcode']] = array('Descrizione'=>$righi['Descrizione'], 'Vendita'=>$righi['Vendita'],'UM'=>$righi['UM'],'Quantita'=>$righi['Quantita'],'Fornitore'=>$righi['Fornitore'],'Codice'=>$righi['Codice']);    //creo un nuovo array dove salvo per ogni barcode, i dati.
$barcodeart_da_mostrare = array();
if(isset($_POST['barcodeart_vecchi']))
$barcodeart_da_mostrare = $_POST['barcodeart_vecchi'];    //metto gli elementi vecchi realmente mostrati
if(isset($_POST['barcodeart_new'])&& !empty($_POST['barcodeart_new'])){
 $query =mysql_query("SELECT * FROM articoli WHERE Barcode='".mysql_real_escape_string($_POST['barcodeart_new'])."'");  
    //se $esiste == 0 non cè
if(mysql_num_rows($query))//esiste
$barcodeart_da_mostrare[] = $_POST['barcodeart_new'];    //aggiungo quello nuovo (prima bisognerebbe far il controllo per vedere se esiste nel db)
?>
<script type="text/javascript">
$(document).ready(function() {
  $("barcodeart").focus();
});
</script>
<?php
}
foreach($barcodeart_da_mostrare as $k)
        echo '
		<table>
        <tr> 
        <td><input type="text" placeholder="Barcode" name="barcodeart_vecchi[]" id="barcodeart" size="10" value="'.$k.'"></td> 
        <td><input type="text" placeholder="Descrizione" name="descrizione[]" id="descrizione" size="50" value="'.$barcodeart[$k]['Descrizione'].'"></td> 
        <td><input type="text" style="text-align:center" placeholder="Qnt" name="quantita[]" id="quantita" size="3" value="1"></td> 
        <td><input type="text" placeholder="Prezzo" name="prezzo[]" id="prezzo" size="5" value="'.$barcodeart[$k]['Vendita'].'" ></td> 
				<td><input type="hidden" name="fornitore[]" id="fornitore" size="100" value="'.$barcodeart[$k]['Fornitore'].'"></td> 
        <td><input type="hidden" name="codice[]" id="codice" size="100" value="'.$barcodeart[$k]['Codice'].'"></td> 
		<td><input type="hidden" name="reparto[]" id="reparto" size="100" value="'.$barcodeart[$k]['Reparto'].'"></td> 
		<td><input type="hidden" name="UM[]" id="UM" size="100" value="'.$barcodeart[$k]['UM'].'"></td> 
        </tr></table> 
        ';
}
?>
Come potete vedere ho provato con :

Codice:
<script type="text/javascript">
$(document).ready(function() {
  $("barcodeart").focus();
});
</script>
Ma non va... Potete aiutarmi?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Ciao, manca il cancelletto # prima dell'id dell'input
Codice:
<script type="text/javascript">
$(document).ready(function() {
  $("#barcodeart").focus();
});
</script>
Naturalmente prima dev'essere inclusa la libreria jquery
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
Ciao, manca il cancelletto # prima dell'id dell'input
Codice:
<script type="text/javascript">
$(document).ready(function() {
  $("#barcodeart").focus();
});
</script>
Naturalmente prima dev'essere inclusa la libreria jquery
Ho provato ma non va... Il problema è che con l'id barcodeart ne ho molti... questo perchè quella casella serve per inserire e cercare dei prodotti in magazzino... <c'è un modo per selezionarne una diretta? a me serve solamente la prima, quella su cui inserisco il barcode e poi lo cerco in magazzino...
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
per prima cosa non puoi assegnare lo stesso id a più di un elemento
devi trovare il modo di assegnare un id diverso ad ogni elemento
barcodeart_1
barcodeart_2
etc
poi puoi usare la stess sintassi indicando l'elemento che dovrà avere il focus
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
no il fatto è che quel barcode li viene poi inserito su una tabulazione... hai visto il codice scritto?
questa è la riga dell'input:
HTML:
<td><input type="text" placeholder="Barcode" name="barcodeart_new" id="barcodeart" size="10" value="" class="barcode"></td>
e questo è quello che succede dopo aver letto quel barcode:

PHP:
foreach($barcodeart_da_mostrare as $k)
        echo '
        <table>
        <tr> 
        <td><input type="text" placeholder="Barcode" name="barcodeart_vecchi[]" id="barcodeart" size="10" value="'.$k.'"></td> 
        <td><input type="text" placeholder="Descrizione" name="descrizione[]" id="descrizione" size="50" value="'.$barcodeart[$k]['Descrizione'].'"></td> 
        <td><input type="text" style="text-align:center" placeholder="Qnt" name="quantita[]" id="quantita" size="3" value="1"></td> 
        <td><input type="text" placeholder="Prezzo" name="prezzo[]" id="prezzo" size="5" value="'.$barcodeart[$k]['Vendita'].'" ></td> 
                <td><input type="hidden" name="fornitore[]" id="fornitore" size="100" value="'.$barcodeart[$k]['Fornitore'].'"></td> 
        <td><input type="hidden" name="codice[]" id="codice" size="100" value="'.$barcodeart[$k]['Codice'].'"></td> 
        <td><input type="hidden" name="reparto[]" id="reparto" size="100" value="'.$barcodeart[$k]['Reparto'].'"></td> 
        <td><input type="hidden" name="UM[]" id="UM" size="100" value="'.$barcodeart[$k]['UM'].'"></td> 
        </tr></table> 
        ';
}
 
Ultima modifica:

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
devo ripetermi, non puoi assegnare lo stesso id a più di un elemento
PHP:
$i = 0;
foreach($barcodeart_da_mostrare as $k) {
    echo ' id="barcodeart_' . $i . '"';
    $i++;
}
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
La modifica nel ciclo php te l'ho appena postata
per dare il focus al primo elemento ti basta modificare il javascript cosi
HTML:
<script type="text/javascript">
$(document).ready(function() {
  $("#barcodeart_0").focus();
});
</script>
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
no aspetta... io uso barcodeart come input... da li partono le varie query.. alla fine delle query parte un foreach che si preoccupa di generare la tabella, nella quale l'id del barcode è barcodeart... O cambio l'id dell'input da barcodeart a barcodearticolo.. oppure cambio quello che genero.. a me non serve posizionarmi sull'ultima riga che inserisco, ma serve posizionarmi sull'input...
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
sul primo input fuori dal ciclo?
allora cambia id a quello
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
praticamente a me serve che ogni volta che isnerisco un barcode e si genera la riga lui torni col cursore sull'input... come devo fare? dove piazzo la stringa java?
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
Tu vuoi che il cursore si riposizioni qui?
HTML:
<table>
<tr>
<td><input type="text" placeholder="Barcode" name="barcodeart_new" id="barcodeart" size="10" value="" class="barcode"></td>
visto che gli id in javascript devono essere univoci, lo cambi cosi
HTML:
<table>
<tr>
<td><input type="text" placeholder="Barcode" name="barcodeart_new" id="barcodeart_focus" size="10" value="" class="barcode"></td>
e il javascript lo modifichi cosi
Codice:
<script type="text/javascript">
$(document).ready(function() {
  $("#barcodeart_focus").focus();
});
</script>
non serve che sposti il codice devi solo assegnare degli id univoci
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
uhm.. non va... ho cambiato id ed ho messo l'id giusto anche nel codice java ma non va... riscrivo la pagina per intero...:

PHP:
<?php
session_start();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<link href="grafica.css" rel="stylesheet" type="text/css">
<script type=”text/javascript” src=”http://code.jquery.com/jquery-latest.pack.js”></script>
</head> 
<body bgcolor="b89952">
<form action="<?= $_SERVER['PHP_SELF'] ?>" method="post"> 
<table>
<tr><td align="center"><img src="logo_gestionale.png" width="320" height="115" /></td></tr><tr><td height="20"></td></tr><tr><td height="50" align="center"><font size="+2"><b>...at work...</b></font></td></tr><tr><td height="20"></td></tr></table>
<table>
<tr>
<td><input type="text" placeholder="Barcode" name="barcodeart_new" id="barcodeart_focus" size="10" value="" class="barcode"></td> 
<td><input type="submit" class="visto" name="visto" value=""></td><td>
<input type="submit" name="creapdf"  value="CREA DDT" class="creaddt"></td></tr></table>
<table>
<tr> 
<td><input type="text" size="10" value="BARCODE"></td> 
<td><input type="text" size="50" value="DESCRIZIONE"></td> 
<td><input type="text" style="text-align:center" size="3" value="QNT"></td> 
<td><input type="text" size="5" value="PREZZO" ></td> 
</table> 
<?php  
include('connect.php');  
if(isset($_POST['barcodeart_new']) && !empty($_POST['barcodeart_new']))
    $query = 'SELECT * FROM articoli WHERE Barcode=\''.mysql_real_escape_string($_POST['barcodeart_new']).'\'';    //se i barcode sono interi, si possono evitare gli apici \'
else if(isset($_POST['barcodeart_vecchi'])&& !empty($_POST['barcodeart_vecchi']))
    $query = 'SELECT * FROM articoli WHERE 0 ';    //il WHERE 0 è una bruttura... se non funziona, si può cercar di far di meglio

if(isset($_POST['barcodeart_vecchi']))
    foreach($_POST['barcodeart_vecchi'] as $barcode)
        $query .= ' OR Barcode=\''.mysql_real_escape_string($barcode).'\' ';    //se i barcode sono interi, si possono evitare gli apici \'
if(isset($query))    
    $result = mysql_query($query) or die('Query failed: ' . mysql_error() . "<br />");
?> 
<table> 
<?php
if(isset($result))
{
    while($righi=mysql_fetch_array($result))
$barcodeart[$righi['Barcode']] = array('Descrizione'=>$righi['Descrizione'], 'Vendita'=>$righi['Vendita'],'UM'=>$righi['UM'],'Quantita'=>$righi['Quantita'],'Fornitore'=>$righi['Fornitore'],'Codice'=>$righi['Codice']);    //creo un nuovo array dove salvo per ogni barcode, i dati.
$barcodeart_da_mostrare = array();
if(isset($_POST['barcodeart_vecchi']))
$barcodeart_da_mostrare = $_POST['barcodeart_vecchi'];    //metto gli elementi vecchi realmente mostrati
if(isset($_POST['barcodeart_new'])&& !empty($_POST['barcodeart_new'])){
 $query =mysql_query("SELECT * FROM articoli WHERE Barcode='".mysql_real_escape_string($_POST['barcodeart_new'])."'");  
    //se $esiste == 0 non cè
if(mysql_num_rows($query))//esiste
$barcodeart_da_mostrare[] = $_POST['barcodeart_new'];    //aggiungo quello nuovo (prima bisognerebbe far il controllo per vedere se esiste nel db)
}
foreach($barcodeart_da_mostrare as $k)
        echo '
		<table>
        <tr> 
        <td><input type="text" placeholder="Barcode" name="barcodeart_vecchi[]" id="barcodeart" size="10" value="'.$k.'"></td> 
        <td><input type="text" placeholder="Descrizione" name="descrizione[]" id="descrizione" size="50" value="'.$barcodeart[$k]['Descrizione'].'"></td> 
        <td><input type="text" style="text-align:center" placeholder="Qnt" name="quantita[]" id="quantita" size="3" value="1"></td> 
        <td><input type="text" placeholder="Prezzo" name="prezzo[]" id="prezzo" size="5" value="'.$barcodeart[$k]['Vendita'].'" ></td> 
				<td><input type="hidden" name="fornitore[]" id="fornitore" size="100" value="'.$barcodeart[$k]['Fornitore'].'"></td> 
        <td><input type="hidden" name="codice[]" id="codice" size="100" value="'.$barcodeart[$k]['Codice'].'"></td> 
		<td><input type="hidden" name="reparto[]" id="reparto" size="100" value="'.$barcodeart[$k]['Reparto'].'"></td> 
		<td><input type="hidden" name="UM[]" id="UM" size="100" value="'.$barcodeart[$k]['UM'].'"></td> 
        </tr></table> 
        ';
				?>
<script type="text/javascript">
$(document).ready(function() {
  $("#barcodeart_focus").focus();
});
</script>
<?php
}
?>
<table align="left">
<tr><td>Seleziona la causale del DdT:</td><td><select name="causale" id="causale" >
   <option value="Option 1" selected></option>
   <option value="RESO">RESO  </option>
   <option value="RIAPRAZIONE">RIPARAZIONE</option>
   <option value="VENDITA">VENDITA</option>
   <option value="TRASFERIMENTO INTERNO">TRASFERIMENTO INTERNO</option>
</select></td></tr>
<tr><td>Inserisci il numero dei colli e l'aspetto:</td><td><input type="text" id="colli" name="colli" value="" size="40" /></td></tr>
<tr><td>Seleziona porto franco o porto assegnato:</td>
<td><select name="porto" id="porto" >
   <option value="Option 1" selected></option>
   <option value="ASSEGNATO" >ASSEGNATO</option>
   <option value="FRANCO">FRANCO</option>
  </select></td></tr>
  <tr><td>Seleziona il vettore:</td><td> <select name="vettore" id="vettore" >
  <option value="Option 1" selected></option>
   <option value="INTERNO">INTERNO  </option>
   <option value="A CARICO DESTINATARIO">CARICO DESTINATARIO</option>
   <option value="SDA">SDA</option>
  </select></td></tr>
<tr><td>Inserisci le eventuali note:</td><td><input type="text" id="note" name="note" value="NOTE:" size="40" /></td></tr>
</table>
<?php
echo $_SESSION['piva'];echo '<br>';
echo $_SESSION['id'];
echo $_SESSION['idsedi'];
?> 
</form>
<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br />
</body> 
</html>
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
la stringa di jquery è giusta no? non capisco dove sbaglio...
 

criric

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
21 Ago 2010
5.607
54
48
TN
qui gli apici sono sbagliati
HTML:
<script type=”text/javascript” src=”http://code.jquery.com/jquery-latest.pack.js”></script>
devi usare quelli normali
HTML:
<script type="text/javascript" src="http://code.jquery.com/jquery-latest.pack.js"></script>
il resto va bene, puoi anche spostare qeusto script nella head
HTML:
<script type="text/javascript">
    $(document).ready(function() {
        $("#barcodeart_focus").focus();
    });
</script>
Un consigli: installati firebug se usi firefox o abilita i messaggi di errore javascript su explorer
Ti aiuteranno ad individuare prima gli errori javascript
 

Emix

Utente Attivo
15 Feb 2010
594
0
16
funziona tutto... sei un grande! ti ringrazio veramente per la tua pazienza... scusa per la stupidaggine commessa... Il bello è che uso firefox ed ho installato firebug hahaha ma non ci avevo fatto caso... Grazie ancora... Veramente!