Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.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_Jquery_Arrays - Fatal编程技术网

Javascript 数组最大长度不工作

Javascript 数组最大长度不工作,javascript,jquery,arrays,Javascript,Jquery,Arrays,当我在图像上单击时,它应该将它添加到数组中,但是数组的最大长度是6,因此如果数组中已经有6个对象,它应该提醒并停止让用户在任何新图像上单击 当我运行以下命令时,我可以继续添加图像,并且警报不会发生 jQuery('body').on('change', '.masonry .item :checkbox', function () { var urls = []; urls.length = 6; if (jQuery(urls.len

当我在图像上单击
时,它应该将它添加到
数组中,但是
数组的
最大长度
是6,因此如果
数组中已经有6个对象,它应该
提醒
并停止让用户在任何新图像上单击

当我运行以下命令时,我可以继续添加图像,并且
警报不会发生

      jQuery('body').on('change', '.masonry .item :checkbox', function () {
        var urls = [];
        urls.length = 6;
        if (jQuery(urls.length > 6)) {
          alert("Puoi aggiungere un massimo di 6 immagini");
        } else {
          jQuery('.masonry .item :checkbox:checked').each(function () {
            urls.push(jQuery(this).next('label').find('img').attr('src'));
          });
        }
      });
使用
if(url.length>6)
代替
if(jQuery(url.length>6))

这是预期的工作。
var url=[];
url.length=6;
document.write(URL.length);
文件。写(“
”); document.write(url.length>6)
使用
if(url.length>6)
而不是
if(jQuery(url.length>6))

这是预期的工作。
var url=[];
url.length=6;
document.write(URL.length);
文件。写(“
”);
document.write(url.length>6)
您必须检查已检查项目的长度,而不是空数组

jQuery('body').on('change', '.masonry .item :checkbox', function () {
    var urls = [];
    var checkedItems = jQuery('.masonry .item :checkbox:checked'); // get the checked items
    if (checkedItems.length > 6) {                                 // if the checked items are more than 6, ...
        alert("No! No! No! Only 6!");
        jQuery(this).prop("checked", false);  //<<< UNCHECK THE ELEMENT JUST CHECKED SO THE COUNT REMAINS 6
    } else {
        checkedItems.each(function () {
            urls.push(jQuery(this).next('label').find('img').attr('src'));
        });
    }
});
jQuery('body')。on('change',')。砌体。项:复选框',函数(){
var url=[];
var checkedItems=jQuery('.mashise.item:checkbox:checked');//获取选中的项
如果(checkedItems.length>6){//如果选中的项目超过6。。。
警告(“不!不!不!只有6个!”);

jQuery(this).prop(“checked”,false);//您必须检查选中项的长度,而不是空数组

jQuery('body').on('change', '.masonry .item :checkbox', function () {
    var urls = [];
    var checkedItems = jQuery('.masonry .item :checkbox:checked'); // get the checked items
    if (checkedItems.length > 6) {                                 // if the checked items are more than 6, ...
        alert("No! No! No! Only 6!");
        jQuery(this).prop("checked", false);  //<<< UNCHECK THE ELEMENT JUST CHECKED SO THE COUNT REMAINS 6
    } else {
        checkedItems.each(function () {
            urls.push(jQuery(this).next('label').find('img').attr('src'));
        });
    }
});
jQuery('body')。on('change',')。砌体。项:复选框',函数(){
var url=[];
var checkedItems=jQuery('.mashise.item:checkbox:checked');//获取选中的项
如果(checkedItems.length>6){//如果选中的项目超过6。。。
警告(“不!不!不!只有6个!”);

jQuery(this).prop(“checked”,false);//将URL数组声明为全局变量。 删除URL.length=6;它没有效果。 将if条件修改为
如果(url.length>6)

将URL数组声明为全局变量。 删除URL.length=6;它没有效果。 将if条件修改为
如果(url.length>6)

如果您需要最多6个选中的
src
input
s,您可以创建一个
对象
,在该对象中,您可以根据项目的
选中状态设置和删除项目。此外,通过使用
单击
事件,您可以防止不必要地选中该复选框(这将需要您手动取消选中)。请在下面查找工作小提琴和工作片段

var url={};
console.clear();
jQuery('body')。在('click',')上。砌体。项:复选框',函数(e){
var this_id=jQuery(this).attr(“id”);
var is_checked=jQuery(this).is(“:checked”);
如果(是否选中){
if(Object.keys(url).length<6){
url[this_id]=jQuery(this).next('label').find('img').attr('src');
}否则{
警报(“6号伊马基尼山的火山口”);
e、 预防默认值();
返回false;
}
}否则{
删除(URL[此id]);
}
});

如果您需要最多6个选中的
src
input
s,您可以创建一个
对象
,在该对象中,您可以根据项目的
选中状态设置和删除项目。此外,通过使用
单击
事件,您可以防止不必要地选中该复选框(这将需要您手动取消选中)。请在下面查找工作小提琴和工作片段

var url={};
console.clear();
jQuery('body')。在('click',')上。砌体。项:复选框',函数(e){
var this_id=jQuery(this).attr(“id”);
var is_checked=jQuery(this).is(“:checked”);
如果(是否选中){
if(Object.keys(url).length<6){
url[this_id]=jQuery(this).next('label').find('img').attr('src');
}否则{
警报(“6号伊马基尼山的火山口”);
e、 预防默认值();
返回false;
}
}否则{
删除(URL[此id]);
}
});

据我所知,以下代码导致了问题:

jQuery('.mashise.item:checkbox:checked')。每个(函数(){
push(jQuery(this).next('label').find('img').attr('src'));
});
假设您有10个图像,所以每次单击时,您都会推送10次。您应该只推送当前元素一次。请尝试检查元素是否存在。如果是,请不要推送它

下面是我将如何做的示例。它不使用jQuery,,但您可以相应地修改代码


编辑

问题是:

jQuery('body')。on('change',')。mashise.item:checkbox',function(){
var url=[];
您每次单击都会初始化
URL
。因此它将始终具有
length=0


它应该在处理程序的范围之外。

据我所知,以下代码导致了问题:

jQuery('.mashise.item:checkbox:checked')。每个(函数(){
push(jQuery(this).next('label').find('img').attr('src'));
});
假设您有10个图像,所以每次单击时,您都会推送10次。您应该只推送当前元素一次。请尝试检查元素是否存在。如果是,请不要推送它

下面是我将如何做的示例。它不使用jQuery,,但您可以相应地修改代码


编辑

问题是:

jQuery('body')。on('change',')。mashise.item:checkbox',function(){
var url=[];
您每次单击都会初始化
URL
。因此它将始终具有
length=0


它应该在处理程序的范围之外。

检查此解决方案,希望有帮助,您可以检查console.log以查看更新的url和url计数

首先在更改事件外声明数组URL

内部
if
使用
var urls = []; // if you wish to use it outside, make it global

$('.masonry :checkbox').on('click', function(e){

  var selected = $('.masonry :checkbox:checked');

  if( selected.length > 6 ){
    alert( 'Sorry, no more than 6' );
    e.preventDefault(); // stops the checkbox from being selected
    return;
  }

  // do what you wish with the selected ones
  // selected.each()

})