[英]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.