Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/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
理解这个Javascript函数_Javascript - Fatal编程技术网

理解这个Javascript函数

理解这个Javascript函数,javascript,Javascript,我正在继续一个项目。这是我唯一不明白的事情。它是组合用于sql查询的筛选器字符串的关键函数。此函数是通过单击按钮来调用的 我的问题是查询的值取自$\u请求['FILTER'] <input id="HDN_FILTER" name="FILTER" type="hidden" value="<?php echo $_REQUEST['FILTER']; ?>"> 编写此代码的人试图混淆它,使其他人很难理解它的功能,可能是因为正如您所述,结果被发送到SQL查询。当然,如果

我正在继续一个项目。这是我唯一不明白的事情。它是组合用于sql查询的筛选器字符串的关键函数。此函数是通过单击按钮来调用的

我的问题是查询的值取自$\u请求['FILTER']

<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()
}