Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/463.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/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 使用for循环迭代器缩短函数_Javascript_Jquery - Fatal编程技术网

Javascript 使用for循环迭代器缩短函数

Javascript 使用for循环迭代器缩短函数,javascript,jquery,Javascript,Jquery,我正在尝试使用一些for循环将2.5k行函数缩短为更易于管理的函数。在做了很多修改之后,我成功地抑制了所有语法错误。然而,原本非常长但有效的函数,现在变成了一个短得多但失效的函数。有人能解释一下我做错了什么吗 这就是我要做的事情的本质: function countryChange() { //Blank auto complete box for(var i=0; i<30; i++){ for(var q=5; q<7; q++){

我正在尝试使用一些for循环将2.5k行函数缩短为更易于管理的函数。在做了很多修改之后,我成功地抑制了所有语法错误。然而,原本非常长但有效的函数,现在变成了一个短得多但失效的函数。有人能解释一下我做错了什么吗

这就是我要做的事情的本质:

function countryChange() {
    //Blank auto complete box
    for(var i=0; i<30; i++){
        for(var q=5; q<7; q++){
            for(var u=0; u<3; u++){
                $("#_Q6_Q".concat(toString(i),"_Q", toString(q), "_Q0_Q", toString(u))).val('');
            };
        };
        $("#_Q6_Q".concat(toString(i),"_Q4_Q0_Q0")).val('');
    };
函数countryChange(){
//空白自动完成框

对于(var i=0;i,最好使用jQuery的内置sizzle选择器:

function countryChange() {
    $("[id^='_Q6_Q'],[id^='_Q'], [id^='_Q0_Q'], [id^='_Q4_Q0_Q0']").val('');
};
如果愿意,还可以进行通配符和部分匹配


以下是选择器参考指南:

我建议您拆分问题,创建稍后将在数组中处理的数字,然后定义处理函数,然后处理数组:

function createArray () {
       var res=[];
       var i,q,u;
        for(i=0; i<30; i++){
            for(q=5; q<7; q++){
                for(u=0; u<3; u++) {
                     res.push([i:i, q:q, u:u]);
                    };
                };
            };
 }

// just build it once and store it
var myIndexes = createArray();
与:

function resetAutoCompleteComboBox(a) {
      var i=toString(a.i);
      var q=toString(a.q);
      var u=toString(a.u);
      $("#_Q6_Q" + i + "_Q" + q + "_Q0_Q" + u)).val('');          
}

如果您利用处理函数的相似性,您可能还可以进行一些其他有用的代码分解。

toString是在其他地方定义的函数?难道您不能只写
$('[id^=“\u Q6\u Q”]')。val('')
来清空id以
\u Q6\u Q
开头的所有元素吗?您忘了右括号
}
还是故意的?除了
johnnycardy
注释:如果你没有自己定义
toString
,那么你调用
窗口的
toString
,这将导致
[对象对象]
。你可以尝试
字符串(i)
,看看你的结果是正确的还是正确的。concat(i,…)
.为什么要使用
.concat()
toString()
呢?
$(“#uq6_Q”+i+“Q”+Q+“Q0_Q”+u)
这是一种非常简洁的方式来压缩所有内容。谢谢。我会使用它!但代码的问题是我在应该是string()的时候使用了toString(),或没有一些人提到的任何功能。
function resetAutoCompleteComboBox(a) {
      var i=toString(a.i);
      var q=toString(a.q);
      var u=toString(a.u);
      $("#_Q6_Q" + i + "_Q" + q + "_Q0_Q" + u)).val('');          
}