2010-06-22 94 views
1

我需要能夠繞過開關的第一個功能,我想知道如何jQuery的切換工程?需要繞過jQuery的切換功能

據我所知,如果我點擊某個東西,第一個功能被執行,然後當我再次點擊它時,第二個功能被執行。

我需要做的就是繞過第一個功能,直接進入第二個功能。

原因我這樣做是因爲發生了另一個事件而改變了按鈕的狀態。當我現在第一次點擊那個按鈕時,它假定它是第一次被點擊並且當我需要它執行第二個功能時將執行第一個功能。

有沒有辦法解決這個問題?如果jQuery切換函數等同於true或false,那麼當然我應該能夠檢查並調用正確的腳本?

非常感謝!

回答

1

我假設其他事件不是總是在第一次切換之前觸發,否則你可能只是反轉這個函數。

你可以改變你的其他事件來觸發切換嗎?如果其他事件正在執行相同的任務,那麼這將是要走的路。

// From within the other event's handler 
$(someselector).click(); // to fire the toggle 

否則,你可以使用.data()放置標誌的元素來檢查toggle()還沒有被解僱。如果沒有,則進行第一次功能測試以查看該元素是否已被其他事件修改。

$(someselector).toggle(
    function() { 
     var $th = $(this); 
     if(!$th.data('toggled')) { // Check if toggle has not yet run 
      $th.data('toggled', true); // If not, set flag it to show it has run 
      if(some_test_to_see_if_modified_externally) { 
       $th.click() // fire the second toggle 
       return;  // return if element has been modified externally 
      } 
     } 
     // otherwise run the normal code 
    }, 
    function() { 
     // your normal code 
    } 
); 
+0

嗨帕特里克, 感謝您給我這個例子。如果我不正確,我會使用它,但如果你能告訴我另一個函數如何調用切換器,那將非常棒,因爲它會清除很多混亂! 非常感謝! – 2010-06-22 13:58:46

+0

@Sixfoot - 是的,只是使用我在答案頂部附近給出的第一個代碼示例。 'toggle()'只是一個'click'事件。因此,當其他事件對具有'toggle'事件的元素進行更改時,只需對其執行'click()'事件:'$(someselector).click();'這將觸發切換它已被點擊。 – user113716 2010-06-22 14:03:49

+0

好的,我會盡力回覆你!感謝帕特里克迄今爲止的所有幫助! – 2010-06-22 14:18:58

0

您可以在toggle功能之外創建一個變量:var isFirstToggle = true;

然後在您的切換回調中,只要返回,如果它等於true;

var isFirstToggle = true; 
$("#myId").toggle(function(){ 
    if (isFirstToggle === true){ 
     isFirstToggle = false; 
     return; 
}, function(){ 
    //do stuff on second toggle. 
}); 

讓我知道你的想法,如果這看起來合適。有可能是更清潔的方式來處理它,但這應該快速n-dirty。

+0

這將*總是*禁用第一個切換。這可能不是期望的。如果是這樣的話,你可以顛倒這兩個函數的順序。 :O) – user113716 2010-06-22 13:56:42