[英]Can't empty JS array
是的,我对此非常基本(或似乎如此)的东西有疑问。 我对JS还是很陌生,但仍然想尽一切办法,但是我对PHP非常熟悉,并且从未经历过类似的事情。 我只是不能清空这个该死的数组,每次我运行这个东西时,东西总是不断增加。
我不知道为什么,而且我开始认为它与chekbox ID的命名方式有关,但我可能会误会....
id="alias[1321-213]"
, id="alias[1128-397]"
, id="alias[77-5467]"
等。
我试过粘
checkboxes = [];
和checkboxes.length = 0;
在所有可能的地方。 在函数开始之后,在函数结尾处,甚至在函数末尾,恰好在函数之前,但这无济于事,清空此数组的唯一方法是重新加载页面。 请告诉我我做错了什么,或者至少将我指向可以进行RTFM的地方。 我在这里完全没有主意。
function() {
var checkboxes = new Array();
checkboxes = $(':input[name="checkbox"]');
$.each(checkboxes,
function(key, value) {
console.log(value.id);
alert(value.id);
}
);
checkboxes.length = 0;
}
我也已经阅读了3次Mastering Javascript Arrays ,以确保我没有做错什么,但是仍然无法弄清楚。
我认为这会引起很多混乱,因为您正在清理阵列 -可能不是出于您想要的目的,或者在错误的时间等。
function () { var checkboxes = new Array(); // local-scope variable checkboxes = $(':input[name="checkbox"]'); // new instance $.each(checkboxes, /* ... */); // (truncated for brevity) checkboxes.length = 0; // this clears the array // but, for what...? // nothing happens now }
按照您的代码片段,每次调用该函数都会重新创建并清除该数组。 但是,阵列的所有工作都是在阵列已满时完成的(清除后什么也没有发生)。
同样, checkboxes
是该函数的私有变量。 该变量仅在函数执行期间存在,并且在函数完成后会被忘记。
那么,总体情况如何? 您为什么要清除阵列?
猜测一下,听起来您打算在下次调用该函数时清除它。
即(为函数名填写doSomething
):
doSomething(); // log all array elements and clears the array
doSomething(); // does nothing, since the array is already empty
为此,您需要在函数外部的单个位置中定义checkboxes
,既可以将其定义为全局变量,也可以使用闭包( 尽管建议使用更复杂的选项,但建议使用闭包):
注意 :如果您以前没有处理过闭包,那么仅举一个例子就可能没有太大意义。 但是,有成千上万的可用资源 ,包括Stack Overflow ,可以比我在这里提供更好的解释。
// closure (or instantly-called function)
// allows for defining private variables, since they are only known by
// code blocks within this function
(function () {
// private (closure-scoped) variable(s)
var checkboxes = $(':input[name="checkbox"]');
function doSomething() {
$.each(checkboxes, /* ... */);
checkboxes.length = 0;
}
})();
闭包将运行一次,将checkboxes
定义为输入数组,而doSomething
将在清除数组之前对其进行迭代。
现在,最后一步是公开 doSomething
原因,与checkboxes
,它也是私有的。 您可以通过将函数引用从闭包传递到闭包外部的变量来完成公开:
var doSomething = (function () {
/* ... */
return doSomething; // note that you DO NOT want parenthesis here
})();
是否可以设定长度? ;)
复选框无论如何都是一个jquery对象而不是一个数组。
当您做checkboxes = $(':input[name="checkbox"]');
它不再是数组,以前的任何东西都没有影响。 如果用我知道的任何语言为变量分配新内容,则变量中的内容无关紧要。
您正在犯一些与jQuery有关的错误。 请详细说明,以便我能提供帮助
您确定将所有名称都放在name =“ checkbox”吗? 似乎没有太多意义。 也许您需要$(':input[
type ="checkbox"]');
?
编辑:这很有趣。 上面的选择器也不是很好。 它应该是:
$('input:checkbox');
至于去除东西:
删除变量名
删除 arrname [elem]
是正确的方法。
分配null不会更改长度,只会带来麻烦。
怎么办呢:
checkboxes = new Array();
您也可以删除它。
delete checkboxes;
当您重新运行该功能时,它将再次搜索所有复选框。
考虑以下策略:
function() {
var checkboxes = $(':input[name=checkbox]:not(.examined)');
checkboxes.addClass('examined');
$.each(checkboxes, function(key, value) {
// ... stuff
});
}
如果不想“污染” DOM,也可以使用.data() 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.