当满足某个条件但仅满足其他条件的其余条件时,仅运行一次函数

时间:2015-03-02 10:28:10

标签: jquery

我不知道如何实现上述目标,我试着在下面解释一下。

我有一个if else声明

resizeDiv = function() {    
if (vpw < 600) {
//do something 1
}
else
{
//do something 2
}
};
$(document).ready(resizeDiv);
$(window).bind('resize', resizeDiv);

正如你从上面所看到的那样,我必须调整页面的大小和加载,我的问题是每当我调整页面大小时它们都会触发(从上面的代码来看,这是正确的。

我需要发生的事情就是说VPW是&lt; 600它运行//只做一次1如果我再次调整我的浏览器它不会像已经完成的那样运行。

然后如果我调整大小到&gt; 600 //做一些2触发器然后如果我调整大小到<600 //做一些事情1只会再次触发一次生病尝试用代码解释下面这个。

resizeDiv = function() {    
if (vpw < 600) {
//do something 1
//disable do something 1
//enable do something 2
}
else
{
//do something 2
//disable do something 2
//enable do something 1
}
};
$(document).ready(resizeDiv);
$(window).bind('resize', resizeDiv);

希望这一切都有意义,有人可能会指出我正确的方向来实现我需要发生的事情

Ragards

4 个答案:

答案 0 :(得分:5)

您可以使用像

这样的简单状态
var state;
resizeDiv = function () {
    if (vpw < 600 && state != 1) {
        //do something 1
        state = 1;
        console.log('less', state)
    } else if (vpw >= 600 && state != 2) {
        //do something 2
        state = 2;
        console.log('more', state)
    }
};
$(document).ready(resizeDiv);
$(window).bind('resize', resizeDiv);

演示:Fiddle

答案 1 :(得分:1)

要完成你想要的任务,你必须跟踪当前的状态&#34;并做相应的事情。

我们假设您有两个州state1state2,那么当州目前为something2时你只想做state1,而副反之亦然。它有点类似于保存你已经完成了#34; something2

在代码中,我会这样做:

var state = "nostate"; // you could also set this to the state it starts in.
resizeDiv = function() {   
    if (vpw < 600 && state != "state2") {
        //do something 1

        //enable do something 2
        state = "state2";
    } else if(vpw >= 600 && state != "state1") {
        //do something 2

        //enable do something 1
        state = "state1";
    } else {
        // do nothing.
    }
};
$(document).ready(resizeDiv);
$(window).bind('resize', resizeDiv);

答案 2 :(得分:1)

我建议使用$(window).resize();$(document).ready()。但是你必须在它们内部运行该函数。 $(window).resize();表示在调整浏览器大小时,$(document).ready();表示页面加载时。

首先,定义调整大小的函数

function resizeDiv(){
  var vpw = $(window).width; // if vpw is based on whole page width
   if (vpw < 600) {
     alert('Less than 600px');
     //do something 1
   }
   else
   {
     alert('More than 600px');
     //do something 2
   }
}

然后执行

中的功能
$(document).ready(function(){
   resizeDiv();
   // you can explain other function when your page is READY
});

$(window).resize(function(){
   resizeDiv();
   // also here for other function when your page is on RESIZE
});

注意:

确保您的网页未定义$(document).ready();$(window).resize();

因为定义了导致错误的多个$(document).ready();$(window).resize();

答案 3 :(得分:0)

使用jQuery的.one函数:http://api.jquery.com/one/顾名思义,它只执行一次函数。

否则,只需使用布尔变量来记录已完成的事情:

var doneOnce = false

doSomething(){
     /* stuff stuff stuff */
     doneOnce = true;
}