2015-03-02 184 views
1

我不知道如何實現上面的,生病試着在下面解釋更好。只有在滿足某個條件但是滿足其他條件的情況下才運行一次函數

我有一個if else語句

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

正如你可以從上面我有這樣勢必會調整我的頁面加載,我的問題是,他們觸發我每次調整頁面時看到(WHIS是從上面的代碼是正確的。

我需要發生的是讓說VPW是< 600運行//做點什麼1只有一次,如果我重新調整我的瀏覽器,它不會運行其已經完成。

那麼如果我調整到> 600 //做一些事情2 trig gers然後如果我調整回< 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

回答

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

+0

這個作品完全謝謝你,正是我在尋找 – odd 2015-03-02 11:25:43

0

使用jQuery的.one功能:http://api.jquery.com/one/顧名思義它只執行一次函數。

否則,只用一個布爾變量來保持的記錄,如果事情已經做了:

var doneOnce = false 

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

感謝您的評論,以上是我選擇的答案,需要它多發一次 – odd 2015-03-02 11:29:08

+0

好吧,你明確表示你只希望它只發生一次,現在你選擇了不同的答案,因爲它允許發生不止一次。我感到困惑。 – 2015-03-02 11:39:19

+0

這很難解釋,因此第二位的代碼,我希望幫助,我重視您的評論 – odd 2015-03-02 14:09:29

1

要完成你想要的東西,你將不得不跟蹤當前的「狀態」,並做相應的事情。

假設您有兩個狀態state1state2,那麼當狀態當前爲state1時,您只想執行something2,反之亦然。這有點類似於儲蓄,你已經完成了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); 
+0

謝謝,同樣如下,並錯過了你第一次與這種解決方案和Arun P的 – odd 2015-03-02 11:28:32

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();導致錯誤。

+0

感謝您的評論,我確實把它包裝在一個文檔準備好..抱歉沒有沒有發佈.. – odd 2015-03-02 11:27:37