Chiedo aiuto per questo problema: ho due select create dinamicamente. Quando seleziono il valore dalla selectA i valori nella selectB cambiano (il tutto con ajax e php).
Se seleziono con il mouse il valore del selectA i valori di selectB cambiano correttamente.
A volte ho bisogno di far fare questa operazione in automatico, senza che la faccia l'utente.
Ho creato uno script js che funziona in parte.
Frammento di codice modifybar.js:
var n=document.getElementById("user_category");
var m=document.getElementById("type_barrier");
var y=0;
var found=false;
while (!found){
y=y+1;
n.selectedIndex=y;
loadList('type_barrier',getSelected(n));
alert("ciao");
for (x=1; x<m.length; x++){
m.selectedIndex=x;
if (m.value==vc){
found=true;
break;
}
}
}
La funzione loadList e':
var xmlHttp = getXmlHttpObject();
function loadList(tb, id){
xmlHttp.open('GET', 'request.php?table='+tb+'&id='+id, true);
xmlHttp.onreadystatechange = stateChanged;
xmlHttp.send(null);
}
function addOption(select, value, text) {
var option = document.createElement("option");
option.value = value+'§'+text,
option.text = text;
try {
select.add(option, null);
} catch(e) {
// For Internet Explorer
select.add(option);
}
}
function getSelected(select) {
// Return <option> value selected
return select.options[select.selectedIndex].value;
}
function stateChanged() {
if(xmlHttp.readyState == 4) {
// State OK
if (xmlHttp.status == 200) {
var resp = xmlHttp.responseText;
if(resp) {
// Couple of value into answer string are separated from ;
var values = resp.split(';');
// First element is list ID
var listId = values.shift();
var select = document.getElementById(listId);
select.disabled=false;
// Delete old values
while (select.options.length) {
select.remove(0);
}
if(listId == 'user_category') {
addOption (select, 0, '-- Select user --');
}
else {
addOption (select, 0, '-- Select barrier --');
}
var limit = values.length;
for(i=0; i < limit; i++) {
var pair = values.split('|');
addOption(select, pair[0], pair[1]);
}
}
} else {
alert(xmlHttp.responseText);
}
}
}
function getXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
I miei problemi sono 2:
PROBLEMA1: se da modifybar.js lascio alert("ciao") lo script funziona. Siccome l'alert non lo vorrei (era stato messo in fase di debug per verificarne il comportamento) l'ho tolto ma lo script mi cicla su tutti i valori delle due select e per ogni voce di selectA mi lancia due alert vuoti.
PROBLEMA2: loadList ho dovuto richiamarla a mano perche' con il ciclo di modifybar.js l'evento onchange nella selectA che richiama loadList non va.
Attendo con fiducia!
Un saluto da un nuovo utente.
Se seleziono con il mouse il valore del selectA i valori di selectB cambiano correttamente.
A volte ho bisogno di far fare questa operazione in automatico, senza che la faccia l'utente.
Ho creato uno script js che funziona in parte.
Frammento di codice modifybar.js:
var n=document.getElementById("user_category");
var m=document.getElementById("type_barrier");
var y=0;
var found=false;
while (!found){
y=y+1;
n.selectedIndex=y;
loadList('type_barrier',getSelected(n));
alert("ciao");
for (x=1; x<m.length; x++){
m.selectedIndex=x;
if (m.value==vc){
found=true;
break;
}
}
}
La funzione loadList e':
var xmlHttp = getXmlHttpObject();
function loadList(tb, id){
xmlHttp.open('GET', 'request.php?table='+tb+'&id='+id, true);
xmlHttp.onreadystatechange = stateChanged;
xmlHttp.send(null);
}
function addOption(select, value, text) {
var option = document.createElement("option");
option.value = value+'§'+text,
option.text = text;
try {
select.add(option, null);
} catch(e) {
// For Internet Explorer
select.add(option);
}
}
function getSelected(select) {
// Return <option> value selected
return select.options[select.selectedIndex].value;
}
function stateChanged() {
if(xmlHttp.readyState == 4) {
// State OK
if (xmlHttp.status == 200) {
var resp = xmlHttp.responseText;
if(resp) {
// Couple of value into answer string are separated from ;
var values = resp.split(';');
// First element is list ID
var listId = values.shift();
var select = document.getElementById(listId);
select.disabled=false;
// Delete old values
while (select.options.length) {
select.remove(0);
}
if(listId == 'user_category') {
addOption (select, 0, '-- Select user --');
}
else {
addOption (select, 0, '-- Select barrier --');
}
var limit = values.length;
for(i=0; i < limit; i++) {
var pair = values.split('|');
addOption(select, pair[0], pair[1]);
}
}
} else {
alert(xmlHttp.responseText);
}
}
}
function getXmlHttpObject()
{
var xmlHttp=null;
try
{
// Firefox, Opera 8.0+, Safari
xmlHttp=new XMLHttpRequest();
}
catch (e)
{
// Internet Explorer
try
{
xmlHttp=new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e)
{
xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}
I miei problemi sono 2:
PROBLEMA1: se da modifybar.js lascio alert("ciao") lo script funziona. Siccome l'alert non lo vorrei (era stato messo in fase di debug per verificarne il comportamento) l'ho tolto ma lo script mi cicla su tutti i valori delle due select e per ogni voce di selectA mi lancia due alert vuoti.
PROBLEMA2: loadList ho dovuto richiamarla a mano perche' con il ciclo di modifybar.js l'evento onchange nella selectA che richiama loadList non va.
Attendo con fiducia!
Un saluto da un nuovo utente.