简体   繁体   English

JavaScript函数无法显示正确的页面

[英]javascript function not displaying correct page

i want to open a specific window according to a drop down selection, the function works fine on the first row of a set of data (pulling it from a database) Since i don't know how many rows are going to come each time the script is running, i've created a loop and writting the function as many times as rows there are coming, having them named different. 我想根据下拉选择打开一个特定的窗口,该功能在一组数据的第一行(从数据库中将其拉出)上正常工作,因为我不知道每次都会有多少行脚本正在运行,我创建了一个循环,并将函数写入的行数与即将到来的行的次数相同,并命名了不同的行。 The thing is that when i change the drop down from the first row, the correct window opens, for instance custom.php?id=1, but when i open the second one, if i select comunicarse from the list, it opens custom.php?id=2 (id=2 is the user's id) Here is the code, and i really hope you can understand me.... 关键是,当我从第一行更改下拉菜单时,将打开正确的窗口,例如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>

It's hard to tell an exact answer without seeing your database structure, but at first I would not create your javascript function inside the while loop, as it will make several functions. 不看您的数据库结构就很难说出确切的答案,但是起初我不会在while循环内创建您的javascript函数,因为它将创建多个函数。 On the top of that you really do not need the first SELECT if you use a parameterized javascript function that you call later with the apropriate parameters. 最重要的是,如果您使用参数化的javascript函数(稍后再使用适当的参数调用),则实际上不需要第一个SELECT。

I have modified your code, please take a look at a more effective javascript function and its calling below: 我已经修改了您的代码,请在下面查看更有效的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>

instead of writing multiple function you can write 而不是编写多个功能,您可以编写

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>

Now your code is shorter because you have just one function to handle everything Note that you are passing the "Id" as parameter 现在您的代码更短了,因为您只有一个函数来处理所有内容。请注意,您正在传递“ Id”作为参数

If you have thousands of records, you would have generated thousands of functions slowing the page down 如果您有成千上万的记录,那么您将生成成千上万的函数,从而降低页面速度

Not sure whether .value will always work properly. 不知道.value是否将始终正常工作。 Consider the following changes at this point in your code: 此时,请考虑以下代码更改:

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.'")
    }
    // ...
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM