Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 在脚本中重复javascript功能,但不包含同一代码的多个实例_Php_Javascript_Mysql_Scripting - Fatal编程技术网

Php 在脚本中重复javascript功能,但不包含同一代码的多个实例

Php 在脚本中重复javascript功能,但不包含同一代码的多个实例,php,javascript,mysql,scripting,Php,Javascript,Mysql,Scripting,我没有Java脚本的工作知识,我正在努力学习它 我有一个带有表的PHP页面。行的第一列有一个下拉列表。当触发onclick事件时,它将基于php-mysql查询填充行中的其他单元格 问题是,我的表最多可以由75行组成,就像订单页面一样。我不希望用不同的指针使用相同的javascropt代码75次 为了优化页面并降低页面复杂性,有没有更简单的方法?(document.getElementById(“txtHint1”).innerHTML=“”;) 我能用美元吗?如果是,我如何整合它?否则我有什么

我没有Java脚本的工作知识,我正在努力学习它

我有一个带有表的PHP页面。行的第一列有一个下拉列表。当触发onclick事件时,它将基于php-mysql查询填充行中的其他单元格

问题是,我的表最多可以由75行组成,就像订单页面一样。我不希望用不同的指针使用相同的javascropt代码75次

为了优化页面并降低页面复杂性,有没有更简单的方法?(document.getElementById(“txtHint1”).innerHTML=“”;)

我能用美元吗?如果是,我如何整合它?否则我有什么选择

我的php页面如下所示。目前它使用两行,但是我需要设置75行

<html>
 <head>
 <script type="text/javascript">
 function showUser1(str)
 {
 if (str=="")
   {
   document.getElementById("txtHint1").innerHTML="";
   return;
   } 
if (window.XMLHttpRequest)
   {// code for IE7+, Firefox, Chrome, Opera, Safari
   xmlhttp=new XMLHttpRequest();
   }
 else
   {// code for IE6, IE5
   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
 xmlhttp.onreadystatechange=function()
   {
   if (xmlhttp.readyState==4 && xmlhttp.status==200)
     {
     document.getElementById("txtHint1").innerHTML=xmlhttp.responseText;
     }
   }
 xmlhttp.open("GET","getdata1.php?q="+str,true);
 xmlhttp.send();
 }

 </script>
 <script type="text/javascript">
 function showUser2(str)
 {
 if (str=="")
   {
   document.getElementById("txtHint2").innerHTML="";
   return;
   } 
if (window.XMLHttpRequest)
   {// code for IE7+, Firefox, Chrome, Opera, Safari
   xmlhttp=new XMLHttpRequest();
   }
 else
   {// code for IE6, IE5
   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
 xmlhttp.onreadystatechange=function()
   {
   if (xmlhttp.readyState==4 && xmlhttp.status==200)
     {
     document.getElementById("txtHint2").innerHTML=xmlhttp.responseText;
     }
   }
 xmlhttp.open("GET","getdata1.php?q="+str,true);
 xmlhttp.send();
 }

 </script>
 </head>
 <body>
 <?

 $con = mysql_connect('localhost', 'unilekxy_UL', 'Unilever2011');
 if (!$con)
   {
   die('Could not connect: ' . mysql_error());
   }

mysql_select_db("unilekxy_unilever", $con);


$skusql="SELECT packcode,concat(packcode, ' - ' , description) as description from skudata"; 
$resultsku=mysql_query($skusql); 

$optionssku=""; 

while ($row=mysql_fetch_array($resultsku)) { 

    $sku=$row["packcode"]; 
    $description=$row["description"]; 
    $optionssku.="<OPTION VALUE=\"$sku\">".$description; 
} 

 ?>

<table border=1>
<tr>
    <td width=393>Product</td>
    <td width=200>Category</td>
    <td width=150>Selling Unit</td>
    <td width=150>Grouping</td>
    <td width=150>Full Case QTY</td>
</tr>
</table>

<table>
<tr>
    <td>
        <select name="users" onchange="showUser1(this.value)" size=1>
        <OPTION VALUE=0>
        <?=$optionssku?> 
        </SELECT> 
    </td>
    <td>
        <div id="txtHint1"><b>SKU Details will be seen here</b></div>
    </td>
</tr>

<tr>
    <td>
        <select name="users" onchange="showUser2(this.value)" size=1>
        <OPTION VALUE=0>
        <?=$optionssku?> 
        </SELECT> 
    </td>
    <td>
        <div id="txtHint2"><b>SKU Details will be seen here</b></div>
    </td>
</tr>

</table>


</body>
 </html>

函数showUser1(str)
{
如果(str==“”)
{
document.getElementById(“txtHint1”).innerHTML=“”;
回来
} 
if(window.XMLHttpRequest)
{//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}
其他的
{//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数()
{
if(xmlhttp.readyState==4&&xmlhttp.status==200)
{
document.getElementById(“txtHint1”).innerHTML=xmlhttp.responseText;
}
}
open(“GET”、“getdata1.php?q=“+str,true”);
xmlhttp.send();
}
函数showUser2(str)
{
如果(str==“”)
{
document.getElementById(“txtHint2”).innerHTML=“”;
回来
} 
if(window.XMLHttpRequest)
{//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}
其他的
{//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数()
{
if(xmlhttp.readyState==4&&xmlhttp.status==200)
{
document.getElementById(“txtHint2”).innerHTML=xmlhttp.responseText;
}
}
open(“GET”、“getdata1.php?q=“+str,true”);
xmlhttp.send();
}

您可以通过从调用者传递附加参数使其成为泛型函数

已修改的函数,请注意,函数名已更改为
showUser
,并添加了额外的参数
num
,以标识调用它的行

function showUser(str, num)
 {
 if (str=="")
   {
   document.getElementById("txtHint" + num).innerHTML="";
   return;
   } 
if (window.XMLHttpRequest)
   {// code for IE7+, Firefox, Chrome, Opera, Safari
   xmlhttp=new XMLHttpRequest();
   }
 else
   {// code for IE6, IE5
   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
 xmlhttp.onreadystatechange=function()
   {
   if (xmlhttp.readyState==4 && xmlhttp.status==200)
     {
     document.getElementById("txtHint" + num).innerHTML=xmlhttp.responseText;
     }
   }
 xmlhttp.open("GET","getdata1.php?q="+str,true);
 xmlhttp.send();
 }
修改后的HTML,请注意函数名中的更改和一个附加参数1,该参数在下一行中为2,依此类推

<select name="users" onchange="showUser(this.value, 1)" size=1> 


Edit:将参数名称从index改为num,由于textHint从1开始,因此index具有误导性。

您可以通过从调用者传递附加参数使其成为泛型函数

已修改的函数,请注意,函数名已更改为
showUser
,并添加了额外的参数
num
,以标识调用它的行

function showUser(str, num)
 {
 if (str=="")
   {
   document.getElementById("txtHint" + num).innerHTML="";
   return;
   } 
if (window.XMLHttpRequest)
   {// code for IE7+, Firefox, Chrome, Opera, Safari
   xmlhttp=new XMLHttpRequest();
   }
 else
   {// code for IE6, IE5
   xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
   }
 xmlhttp.onreadystatechange=function()
   {
   if (xmlhttp.readyState==4 && xmlhttp.status==200)
     {
     document.getElementById("txtHint" + num).innerHTML=xmlhttp.responseText;
     }
   }
 xmlhttp.open("GET","getdata1.php?q="+str,true);
 xmlhttp.send();
 }
修改后的HTML,请注意函数名中的更改和一个附加参数1,该参数在下一行中为2,依此类推

<select name="users" onchange="showUser(this.value, 1)" size=1> 

编辑:将参数名称从index改为num,因为textHint从1开始,所以index有误导性。

以下是简单的方法:

showUser1(str)
变成

showUser1(str, number)
document.getElementById("txtHint"+number).innerHTML="";

变成

showUser1(str, number)
document.getElementById("txtHint"+number).innerHTML="";
在html中:

<select name="users" onchange="showUser2(this.value)" size=1>

变成

<select name="users" onchange="showUser(this.value,2)" size=1>

以下是简单的方法:

showUser1(str)
变成

showUser1(str, number)
document.getElementById("txtHint"+number).innerHTML="";

变成

showUser1(str, number)
document.getElementById("txtHint"+number).innerHTML="";
在html中:

<select name="users" onchange="showUser2(this.value)" size=1>

变成

<select name="users" onchange="showUser(this.value,2)" size=1>

在变更处理程序上编写一个通用代码,并在变更处理程序中获取select元素 然后
element.parentNode.nextSibling.firstChild将给出您的div标记,然后将其id用于js元素引用并进行正确的php调用。这样,所有html事件下标都是相同的


您还可以编写一个以tr元素(代表用户)为主体的php循环,然后使用上述方法连接javascript。这样,您的html代码和js代码都将减少,您甚至不必显式地命名它们。

在更改处理程序中编写一个通用的,并在更改处理程序中获取select元素 然后
element.parentNode.nextSibling.firstChild将给出您的div标记,然后将其id用于js元素引用并进行正确的php调用。这样,所有html事件下标都是相同的


您还可以编写一个以tr元素(代表用户)为主体的php循环,然后使用上述方法连接javascript。这样,你的html代码和js代码都会减少,你甚至不必显式地命名它们。

你已经触及了编程最有价值的原则之一:不要重复你自己(DRY)。编程就是寻找做某事的最有效的方法。无论如何,下面是将javascript函数重写为更通用的最简单方法:

<script type="text/javascript">
  function showUser(userNumber, str)
  {
    if (str=="")
    {
      document.getElementById("txtHint" + userNumber).innerHTML="";
      return;
    } 
    if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
      xmlhttp=new XMLHttpRequest();
    }
    else
    {// code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

    xmlhttp.onreadystatechange=function()
    {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
      {
        document.getElementById("txtHint" + userNumber).innerHTML=xmlhttp.responseText;
      }
    }
    xmlhttp.open("GET","getdata1.php?q="+str,true);
    xmlhttp.send();
  }
</script>

函数showUser(userNumber,str)
{
如果(str==“”)
{
document.getElementById(“txtHint”+userNumber).innerHTML=“”;
回来
} 
if(window.XMLHttpRequest)
{//IE7+、Firefox、Chrome、Opera、Safari的代码
xmlhttp=新的XMLHttpRequest();
}
其他的
{//IE6、IE5的代码
xmlhttp=新的ActiveXObject(“Microsoft.xmlhttp”);
}
xmlhttp.onreadystatechange=函数()
{
if(xmlhttp.readyState==4&&xmlhttp.status==200)
{
document.getElementById(“txtHint”+userNumber).innerHTML=xmlhttp.responseText;
}
}
open(“GET”、“getdata1.php?q=“+str,true”);
xmlhttp.send();
}
现在,在每个表行中,select元素变为:

<select name="users" onchange="showUser(1, this.value)" size=1>

将“1”替换为行号


使用jQuery获取最接近的txtHint元素将是一种更好的代码结构方式,但这有点超出了问题的范围。

您已经触及了编程最有价值的原则之一:不要重复自己(DRY)。编程就是寻找做某事的最有效的方法。不管怎样,这是我的建议