【问题标题】:for loop not executing the code when a condition is meet满足条件时for循环不执行代码
【发布时间】:2012-05-16 11:43:12
【问题描述】:

我之前曾问过一个关于如何以更短的方式编写代码块的问题,我得到了答案,并开始根据我的情况进行调整。但是我遇到了一个小问题,这是我正在运行的代码:

var default_cluster_options = {
    limits : [ { min: 1224, items: 8 }, { min: 954, items: 6 }, { min: 624, items: 4 }, { min: 0, items: 2 } ]
};

var default_plugin_options = {
    containerID : "",
    first       : false,
    previous    : false,
    next        : false,
    last        : false,
    startPage   : 1,
    perPage     : 1,
    midRange    : 6,
    startRange  : 1,
    endRange    : 1,
    keyBrowse   : false,
    scrollBrowse: false,
    pause       : 0,
    clickStop   : true,
    delay       : 50,
    direction   : "auto",
    animation   : "fadeIn",
    links       : "title",
    fallback    : 1000,
    minHeight   : true,
    callback    : function(pages, items) {}
};

var Cluster = function(cluster_options, plugin_options) {
    this.options = $.extend({}, default_cluster_options, cluster_options);
    this.plugin_options = $.extend({}, default_plugin_options, plugin_options);
    this.limits = this.options.limits;
    this.inititate_shop();
};

Cluster.prototype.initiate_plugin = function(plugin_navigation, plugin_options) {
    var options = $.extend({}, this.plugin_options, plugin_options);
    return $(plugin_navigation).jPages(options);
};

Cluster.prototype.inititate_shop = function() {
    for (var i = 0; this.viewport_width <= this.limits[i].min; i++) {
        log(this.limits[i].min);
        log(this.viewport_width);
        this.initiate_plugin('.shop-items-navigation', {
            containerID : "shop-items-wrapper",
            perPage     : this.limits[i].items,
            midRange    : 8,
            animation   : "fadeIn",
            links       : "blank",
            keyBrowse   : true,
            callback    : function(pages) {
                log(pages.current);
            }
        });
    }
};

var cluster = new Cluster();

其中的某些代码可能没有意义,因为还有其他代码块,但我认为这就是与我的问题相关的所有代码,可能会导致问题。

我的问题是Cluster.prototype.inititate_shop 属性内的for() 循环。我在控制台中没有看到任何错误,但是当我尝试查看另一个循环是否适用于 this.limits 变量(这是一个由 4 个对象组成的数组)时,它确实发生了。

所以这就是为什么我不明白为什么该功能不起作用或for() 循环会中断,我在这里询问是否有人发现了我没有发现的东西(我有丢失东西的历史)。

【问题讨论】:

  • 你测试过条件 - viewport_width 和 this.limits[i].min 的值是多少?
  • 哦,对不起,this.viewport_width 是窗口的宽度。限制在对象内部的该数组中设置。是的,我已经测试过了,但什么也没发生。
  • this.viewport_width 的值是多少?
  • 在我的情况下是屏幕全宽 1366px

标签: javascript jquery arrays object for-loop


【解决方案1】:

从上面的 cmets - 问题是您在限制列表中的最高最小值是 1224,但您的视口宽度是 1366,所以:

this.viewport_width <= this.limits[i].min;

永远不会计算为 true,并且永远不会执行 for 循环中的代码。

编辑 2

如果你打破执行检查的语句会怎样:

Cluster.prototype.inititate_shop = function() {
for (var i = 0; i < this.limits.length; i++) {
    if (this.viewport_width >= this.limits[i].min){
        log(this.limits[i].min);
        log(this.viewport_width);
        this.initiate_plugin('.shop-items-navigation', {
            containerID : "shop-items-wrapper",
            perPage     : this.limits[i].items,
            midRange    : 8,
            animation   : "fadeIn",
            links       : "blank",
            keyBrowse   : true,
            callback    : function(pages) {
                log(pages.current);
            }
        });
        return false; // to break out of loop
        }
    }
};

【讨论】:

  • 好的,但是如何解决这个问题,因为这可能比拥有像 980px 宽这样的小型设备更常见。有解决方法吗?
  • 是的,我的第一个想法是这样,但这有点奇怪:) 关于如何重写逻辑的一些建议?我喜欢循环遍历数组或对象的想法,而不是使用if() ... else if() 语句:)
  • 更改比较的方向,这样您就可以搜索更大的值,而不是寻找小于 min 的门户宽度,这样您的 limits 数组中的最终条目就是默认情况
  • 那么,使用这个逻辑for (var i = 3; this.viewport_width &gt;= this.limits[i].min; i--) 会解决它吗?或者它不能适用于所有情况?
  • 我已经测试了@Dave 的逻辑,但它是错误的 :))(难怪)。这种逻辑看起来如何?因为我现在想不出任何可行的方法,除了第一个具有很大价值的建议:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-08-06
  • 1970-01-01
  • 2012-02-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多