Provo a spiegare il funzionamento di questo script misto ASP/javascript:
1) Con ASP eseguo una query ed estraggo una serie di record (righe);
2) Ad ogni record è abbinato un checkbox;
3) Quando si flegga il checkbox la riga interessata cambia colore di sfondo e si apre una finestra popup;
4) Nella finestra popup vorrei passare in querystring dalla pagina madre l'ID corrispondente di quel record ed eseguire una query select con ASP proprio sull'ID passato in querystring.
Il problema è che qualunque checkbox fleggo nella pagina madre, in finestra popup si visualizza sempre l'ID numero 28 che è esattamente l'ID dell'ultima riga estratta con ASP.
Eppure guardando il sorgente della pagina l'ID del checkbox è corretto.
Perchè si comporta così?
Nel seguente estratto da codice si può vedere che l'ID che provo a passare in querystring è il 50, mentre la pagina aperta in popup _inc_dettaglio_popup.asp recupera sempre il 28.
codice:
<link type="text/css" rel="stylesheet" href="/css/style.css">
<div id="someList">
<script language="javascript" type="text/javascript">
<!--
function uncheckAllExceptThis(input) {
var table = input.parentNode,
els,
el,
i;
while (table.nodeName !== 'TABLE' && table.nodeName !== 'BODY') {
table = table.parentNode;
}
if (table.nodeName === 'BODY') {
return;
}
els = table.getElementsByTagName('input');
for (i = 0; i < els.length; i += 1) {
el = els[i];
if (el.type === 'checkbox' && el !== input) {
el.checked = false;
updateRowColour(el);
}
}
}
function updateRowColour(input) {
var checked = '';
if (input.checked) {
checked = 'checked';
} else {
input.checked = null;
}
input.parentNode.parentNode.className = checked;
}
//-->
</script>
<div align=center>
<center>
<TABLE BORDER=0 CELLPADDING=0 CELLSPACING=0
style="border: 1px Solid #6699CC;">
<tr>
<td>
<TABLE BORDER=0 CELLPADDING=2 CELLSPACING=2
style="font-size=11px;font-family:tahoma;" width="100%"
BGCOLOR=WHITE>
<tr bgcolor=#dcdcdc>
//INIZIO INTESTAZIONI TABELLA
...
//FINE INTESTAZIONI TABELLA
//INIZIO VALORI TABELLA
<tr bgcolor=#F6F6F6>
<td align=center>
<input type=checkbox name=C1 value=ON></td>
...
<script type="text/javascript">
var list = document.getElementById('someList');
list.onclick = function (evt) {
evt = evt || window.event;
var targ = evt.target || evt.srcElement;
if (!(targ && targ.nodeName && targ.nodeName === 'INPUT' && targ.type === 'checkbox')) {
return;
}
uncheckAllExceptThis(targ);
updateRowColour(targ);
if (targ.checked) {
var w = 1000
var h = 400
var left = (screen.width/2)-(w/2);
var top = (screen.height/2)-(h/2);
window.open ('_inc_dettaglio_popup.asp?sID=50', '',
'location=no, directories=no, status=no, menubar=no,
scrollbars=yes, toolbar=no, resizable=no, copyhistory=no,
width='+w+', height='+h+', top='+top+', left='+left);
}
};
</script>
//SEGUONO TUTTE LE RIGHE CON IL PROPRIO CHECKBOX
...
...
...
//ULTIMA RIGA CON ID = 28
<tr bgcolor=#F6F6F6>
<td align=center>
<input type=checkbox name=C1 value=ON>
</td>
<script type="text/javascript">
var list = document.getElementById('someList');
list.onclick = function (evt) {
evt = evt || window.event;
var targ = evt.target || evt.srcElement;
if (!(targ && targ.nodeName && targ.nodeName === 'INPUT' && targ.type === 'checkbox')) {
return;
}
uncheckAllExceptThis(targ);
updateRowColour(targ);
if (targ.checked) {
var w = 1000
var h = 400
var left = (screen.width/2)-(w/2);
var top = (screen.height/2)-(h/2);
window.open ('_inc_dettaglio_popup.asp?sID=28', '',
'location=no, directories=no, status=no, menubar=no,
scrollbars=yes, toolbar=no, resizable=no, copyhistory=no,
width='+w+', height='+h+', top='+top+', left='+left);
}
};
</script>
</tr></table></td></tr></table>
</div>
//FINE VALORI TABELLA
//FINE SOMELIST
</div>