理解这个Javascript函数
我正在继续一个项目。这是我唯一不明白的事情。它是组合用于sql查询的筛选器字符串的关键函数。此函数是通过单击按钮来调用的 我的问题是查询的值取自$\u请求['FILTER']理解这个Javascript函数,javascript,Javascript,我正在继续一个项目。这是我唯一不明白的事情。它是组合用于sql查询的筛选器字符串的关键函数。此函数是通过单击按钮来调用的 我的问题是查询的值取自$\u请求['FILTER'] <input id="HDN_FILTER" name="FILTER" type="hidden" value="<?php echo $_REQUEST['FILTER']; ?>"> 编写此代码的人试图混淆它,使其他人很难理解它的功能,可能是因为正如您所述,结果被发送到SQL查询。当然,如果
<input id="HDN_FILTER" name="FILTER" type="hidden" value="<?php echo $_REQUEST['FILTER']; ?>">
编写此代码的人试图混淆它,使其他人很难理解它的功能,可能是因为正如您所述,结果被发送到SQL查询。当然,如果您想对用户隐藏任何内容,特别是SQL命令,请在服务器端实现它
1) ”=代码>部分:
“”!=document.getElementById(“HDN_搜索”).value//左侧
&&//逻辑与
(aryTemp.SEARCH=document.getElementById(“HDN_SEARCH”).value),//右侧
数组\过滤器\临时=新数组;//另一项声明
在这里,他利用了,如果表达式左侧的计算结果为false
,则右侧不会执行。始终执行,
之后的下一条语句(请阅读有关该语句的更多信息)。所以这和写作是一样的:
if(document.getElementById(“HDN\u SEARCH”).value!=“”){
aryTemp.SEARCH=document.getElementById(“HDN_SEARCH”).value
}
阵列\过滤器\临时=新阵列;
2) 开关
部件:
开关(
varFilter=array\u Filter\u Temp.join(“^”),
document.getElementById(“HDN_FILTER”).value=varFilter,
document.getElementById(“HDN_EXCEL”).value=1==e?1:0,
!0
) {
前两个很简单。在第三个上,他根据e
的值分配HDN\u EXCEL
。添加括号使其更清晰:document.getElementById(“HDN\u EXCEL”)。值=(1==e)?1:0
!0
仅用于确保执行开关的其余部分(其计算结果为true
)。如果它是0
或false
,则HDN\u OVERRIDE
将永远不会被分配到值
因此,整个集合可以重写为:
varFilter=array\u Filter\u Temp.join(“^”);
document.getElementById(“HDN_FILTER”).value=varFilter;
document.getElementById(“HDN_EXCEL”).value=(e==1)?1:0;
开关(t){
案例1:
document.getElementById(“HDN_覆盖”)。值=1;
打破
案例0:
document.getElementById(“HDN_覆盖”)。值=0;
打破
}
3) 第一个for
循环:(您还没有问,但它还是在这里)
for(数组中的i\u下拉列表){
如果(
varField=array_下拉列表[i],
varID=“SEL_u2;”+varField,
aryTemp=新阵列,
-1!=document.getElementById(varID)。选择索引
)
对于(i=0;i0&(数组_过滤器[varField]=aryTemp)
}
再次使用,
操作符执行所有命令,并将最后一个命令的值返回到if
,即-1!=document.getElementById(varID).selectedIndex
,因此只有varID
中的元素具有selectedIndex
时,才会运行第二个for
循环
==!0
与==true
相同
这可以改写为:
for(键入数组_下拉列表){
varField=array_下拉菜单[键];
varID=“SEL_u2;”+varField;
aryTemp=新阵列;
if(document.getElementById(varID).selectedIndex!=-1){
对于(i=0;i0){
数组_过滤器[varField]=aryTemp;
}
}
作为补充说明,如果可以,我建议您重构此代码,只将收集的数据发送到服务器,并在服务器端执行所需的所有转换。''!=
它将某些内容与空字符串进行比较“但为什么它在开关括号内?”---因为这段代码的作者不知道如何编写可维护的js。写得这么好的人……说不出话来,反正他没有在“!=document.getElementById(“HDN\u SEARCH”).value&(aryTemp.SEARCH=document.getElementById(“HDN\u SEARCH”).value中分配任何内容)
不创建和if
语句,然后他再次创建相同的全局范围变量array\u Filter\u Temp=new array;
您可以删除这些行,并且不会发生任何事情。“!=正在与空字符串进行比较。没有注意到这一点是有意义的。因为我通常将空字符串放在右侧。哈哈你是这么说的。这个项目让我很头疼。尤其是变量名。一些变量只是被命名为x,y,z@ncubica代码中发生了一些事情。它基本上是一个if检查,看看是否有一个值并设置aryTemp。Search感谢这个美妙的答案。你真的清除了很多。不知道有一个叫做sho的东西rt电路评估。很高兴知道。还感谢for循环中的额外位
function SUBMIT(e, t) {
array_Filter = new Array;
for (i in array_Dropdown) {
if (varField = array_Dropdown[i], varID = "SEL_" + varField, aryTemp = new Array, -1 != document.getElementById(varID).selectedIndex)
for (i = 0; i < document.getElementById(varID).options.length; i++)
document.getElementById(varID).options[i].selected === !0 && (aryTemp[aryTemp.length] = document.getElementById(varID).options[i].value);
aryTemp.length > 0 && (array_Filter[varField] = aryTemp)
}
"" != document.getElementById("HDN_SEARCH").value && (aryTemp.SEARCH = document.getElementById("HDN_SEARCH").value), array_Filter_Temp = new Array;
for (i in array_Filter)
array_Filter_Temp[array_Filter_Temp.length] = i + "=" + array_Filter[i].join("|");
switch (varFilter = array_Filter_Temp.join("^"), document.getElementById("HDN_FILTER").value = varFilter, document.getElementById("HDN_EXCEL").value = 1 == e ? 1 : 0, !0) {
case 1 == t:
document.getElementById("HDN_OVERRIDE").value = 1;
break;
case 0 == t:
document.getElementById("HDN_OVERRIDE").value = 0;
break;
case-1 == t:
}
varTXTBOX = document.getElementById("TXT_SEARCH").value;
alert(varTXTBOX);
document.getElementById("FORM1").submit()
}