我想根据下拉选项打开一个特定窗口,该功能在一组数据的第一行上正常工作(从数据库中拉出) 因为每次脚本运行时我都不知道会有多少行,所以我创建了一个循环并将函数写入了与将要出现的行数相同的次数,并将它们命名为不同。 问题是,当我从第一行更改下拉列表时,会打开正确的窗口,例如custom.php?id = 1,但是当我打开第二行时,如果我从列表中选择comunicarse,它会打开自定义。 php?id = 2(id = 2是用户的id) 这是代码,我真的希望你能理解我......
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title></title>
<style>
table {
border-style:ridge;
border-width:1px solid;
border-collapse:collapse;
font-family:sans-serif;
font-size:12px;
width:100%;
}
table thead th, table.excel tbody th {
background:#CCCCCC;
border-style:ridge;
border-width:1;
text-align: center;
vertical-align:bottom;
}
table tbody th {
text-align:center;
}
table tbody td {
vertical-align:bottom;
}
table tbody td {
padding: 0 3px;
border: 1px solid 0000000;
}
table td {
padding: 0 3px;
border: 1px solid 0000000;
}
</style>
<link rel="stylesheet" href="../css/style.css" type="text/css">
<?php
include("../../cons/dbinfo.php");
$busco_react = "SELECT *
FROM `envios_mercadolibre`
WHERE status != 'ENTREGADA' AND status != 'CANCELADA' AND aviso != 1";
$bus1 = mysql_query($busco_react);
while ($b1 = mysql_fetch_array($bus1)){
$para = $b1['id'];
echo '<script language="Javascript" type="text/javascript">
function ReactToChange'.$para.'()
{
if (document.getElementById("DropDownList").value === "custom")
{
window.open("custom.php?id='.$para.'")
}
else if (document.getElementById("DropDownList").value === "comunicarse")
{
window.open("comunicarse.php?id='.$para.'")
}
else if (document.getElementById("DropDownList").value === "esperando")
{
window.open("esperando.php?id='.$para.'")
}
else if (document.getElementById("DropDownList").value === "compro")
{
window.open("compro.php?id='.$para.'")
}
else {}
}
</script>';
}
?>
</head>
<body>
<table width = "2200px">
<tr><td colspan="3" align="center"><a href="../index.php">Back to index</a></td></tr>
</table>
<br />
<?php
echo "<form method='post' action='sendemails.php'>";
echo "<table border='1' cellpading ='0' cellspacing ='0'>";
echo "<thead><tr><th>MAIL</th><th>Email Address</th><th>Content</th>
<th>Extra 1</th><th>Extra 2</th><th>Full Address</th><th>Full Name</th></tr>
</thead><tbody>";
$bus = "SELECT * FROM `envios_mercadolibre` WHERE status != 'ENTREGADA' AND status != 'CANCELADA' AND aviso != 1";
$bu = mysql_query($bus) or die("este");
while ($b = mysql_fetch_array($bu)){
$contenido = $b['contenido'];
$extra1 = $b['extra1'];
$extra2 = $b['extra2'];
$usuario_id = $b['usuario_id'];
$para1 = $b['id'];
$datosUsuario = "SELECT nombre, apellido, email from usuarios WHERE id = $usuario_id";
$datosU = mysql_query($datosUsuario) or die("foo");
while ($c = mysql_fetch_array($datosU)){
$nombre = $c['nombre'];
$apellido = $c['apellido'];
$email = $c['email'];
$todoelnombre = $nombre.", ".$apellido;
echo "<tr>
<td><select id='DropDownList' onchange='ReactToChange$para1()'>
<option value='later'>LATER</option>
<option value='comunicarse'>COMUNICARSE CON NOSOTROS</option>
<option value='esperando'>ESPERANDO CALIFICACION EN MERCADO LIBRE</option>
<option value='compro'>NO COMPRO</option>
<option value='custom'>CUSTOM</option>
</select></td>
<td>$email</td>
<td>$contenido</td>
<td>$extra1</td>
<td>$extra2</td>
<td>$todaladire</td>
<td>$todoelnombre
<input type='hidden' name ='datos-$para1' value ='$email' />
</td>
</tr>
";
}
}
echo "<tr><TD colspan ='7' align='center'><input type='submit' /></td></tr></table>";
?>
</div>
</body>
</html>
答案 0 :(得分:1)
如果没有看到你的数据库结构,很难说出确切的答案,但起初我不会在while循环中创建你的javascript函数,因为它会产生几个函数。最重要的是,如果你使用参数化的javascript函数,你真的不需要第一个SELECT,稍后你会使用适当的参数调用它。
我修改了你的代码,请看一下更有效的javascript函数及其调用如下:
<html>
<head>
<meta http-equiv="Content-type" content="text/html; charset=utf-8" />
<title></title>
<style>
table {
border-style:ridge;
border-width:1px solid;
border-collapse:collapse;
font-family:sans-serif;
font-size:12px;
width:100%;
}
table thead th, table.excel tbody th {
background:#CCCCCC;
border-style:ridge;
border-width:1;
text-align: center;
vertical-align:bottom;
}
table tbody th {
text-align:center;
}
table tbody td {
vertical-align:bottom;
}
table tbody td {
padding: 0 3px;
border: 1px solid 0000000;
}
table td {
padding: 0 3px;
border: 1px solid 0000000;
}
</style>
<link rel="stylesheet" href="../css/style.css" type="text/css">
<script language="Javascript" type="text/javascript">
function ReactToChange(para,ptype)
{
window.open(ptype+".php?id="+para);
}
</script>
</head>
<body>
<table width = "2200px">
<tr><td colspan="3" align="center"><a href="../index.php">Back to index</a></td></tr>
</table>
<br />
<?php
echo "<form method='post' action='sendemails.php'>";
echo "<table border='1' cellpading ='0' cellspacing ='0'>";
echo "<thead><tr><th>MAIL</th><th>Email Address</th><th>Content</th>
<th>Extra 1</th><th>Extra 2</th><th>Full Address</th><th>Full Name</th></tr>
</thead><tbody>";
$bus = "SELECT * FROM `envios_mercadolibre` WHERE status != 'ENTREGADA' AND status != 'CANCELADA' AND aviso != 1";
$bu = mysql_query($bus) or die("este");
while ($b = mysql_fetch_array($bu)){
$contenido = $b['contenido'];
$extra1 = $b['extra1'];
$extra2 = $b['extra2'];
$usuario_id = $b['usuario_id'];
$para1 = $b['id'];
$datosUsuario = "SELECT nombre, apellido, email from usuarios WHERE id = $usuario_id";
$datosU = mysql_query($datosUsuario) or die("foo");
while ($c = mysql_fetch_array($datosU)){
$nombre = $c['nombre'];
$apellido = $c['apellido'];
$email = $c['email'];
$todoelnombre = $nombre.", ".$apellido;
echo "<tr>
<td><select id='DropDownList' onchange='ReactToChange($para1,this.options[this.selectedIndex].value)'>
<option value='later'>LATER</option>
<option value='comunicarse'>COMUNICARSE CON NOSOTROS</option>
<option value='esperando'>ESPERANDO CALIFICACION EN MERCADO LIBRE</option>
<option value='compro'>NO COMPRO</option>
<option value='custom'>CUSTOM</option>
</select></td>
<td>$email</td>
<td>$contenido</td>
<td>$extra1</td>
<td>$extra2</td>
<td>$todaladire</td>
<td>$todoelnombre
<input type='hidden' name ='datos-$para1' value ='$email' />
</td>
</tr>
";
}
}
echo "<tr><TD colspan ='7' align='center'><input type='submit' /></td></tr></table>";
?>
</div>
</body>
</html>
答案 1 :(得分:0)
而不是编写多个函数,你可以写
function ReactToChange(para)
{
//only call document.getElementById("DropDownList").value once - good programming practice
var dropdownvalue = document.getElementById("DropDownList").value;
if (dropdownvalue === "custom")
{
window.open("custom.php?id='"+para+"'")
}
else if (dropdownvalue === "comunicarse")
{
window.open("comunicarse.php?id='"+para+"'")
}
...
}
<select id='DropDownList' onchange='ReactToChange($para1)'>
<option value='later'>LATER</option>
...
</select>
现在你的代码更短了,因为你只有一个函数来处理所有事情 请注意,您将“Id”作为参数
传递如果您有数千条记录,那么您可能会生成数千种减慢页面速度的功能
答案 2 :(得分:0)
不确定.value
是否始终正常运作。在代码中考虑以下更改:
function ReactToChange'.$para.'()
{
var dropdown = document.getElementById('DropDownList'),
selectedValue = dropdown.options[dropdown.selectedIndex];
// now make all comparisons against selectedValue
// ...
if (selectedValue === 'comunicarse') {
window.open("comunicarse.php?id='.$para.'")
}
// ...
}