2010-07-13 39 views
1

我正在製作一個復活節彩蛋,在此之前必須按正確的順序激活一些鏈接,然後才能顯示該祕密。jQuery:在鏈接#1,2和3上的mouseOver之後 - 激活顯示內容

我無法使該腳本正常工作。我想我寫的東西錯了,但還看不出來是什麼...

<script> 
    $(document).ready(function() { 
     $('#show').hide(); 
     var StepOfThree = 0; 
     alert(StepOfThree); 

     $('#linkone').mouseover(function() { 
      StepOfThree = 1; 
      alert(StepOfThree); 
     }); 

     $('#linktwo').mouseover(function() { 
      if (StepOfThree1 === 1) { 
       StepOfThree = 2; 
       alert(StepOfThree); 
      } else { 
       StepOfThree = 0; 
       alert(StepOfThree); 
      } 
     }); 

     $('#linkthree').mouseover(function() { 
      if (StepOfThree1 === 2) { 
       $('#show').show(); 
       alert(StepOfThree); 

      } else { 
       StepOfThree = 0; 
       alert(StepOfThree); 
      } 
     }); 
    }); 
</script> 

    <a href="#" id="linkone">Link #1</a> 
    <a href="#" id="linktwo">Link #2</a> 
    <a href="#" id="linkthree">Link #3</a> 

    <div id="show">This is hidden content</div> 

在#linkTwo和#linkThree鼠標懸停甚至沒有給我一個提示..我做了什麼錯誤?

+0

因此,使用此更新的版本,它不會在步驟2或3上發出警報? – 2010-07-13 17:42:57

+0

看看我的答案,並比較你的...我的作品適合我。 – 2010-07-13 18:22:27

+0

看看我的修訂,Kenneth B. – 2010-07-13 18:49:45

回答

1

你爲什麼要使用jQuery Javascript的原語?這是非常錯誤的!這似乎像jQuery-itis(對不起,谷歌的緩存鏈接)的情況下 - 使用JavaScript平等操作,不包住StepOfThree一個簡單的數字對比:

if (StepOfThree === 1) 
{ 
    // do stuff 
} 

我的猜測是你學習JavaScript與jQuery同時,對吧?


更新:

好了,這就是爲什麼當你想到你的第二個和第三個處理器不工作:當你創建了你的方式回調,你要創建一個封閉。 實際上,這會將 StepOfThree的值「封存」到 mouseover處理程序中,以免它們看到更新後的值。

嘗試做這樣的代替:

http://jsbin.com/ovocu/6

這樣一來,你的對象上關閉(「參考」或「指針」,如果你熟悉C/C++/Java的)而不是數字本身的原始值。

Some good reading on Javascript closures


更新2:爲最簡單的工作示例,這裏就是Daniel所能提供的(從下面的評論):http://jsbin.com/iluse3

無需繞過的對象。對不起,這造成了任何混亂!

+0

你絕對正確......: - $ – 2010-07-13 17:16:28

+0

我已經上傳了代碼 - 你可以再看一遍嗎? – 2010-07-13 17:36:24

+0

@熊:我不認爲這是JavaScript的工作方式。如果它作爲參數傳遞給函數,它只會「封裝」值,因爲這是在javascript中創建新詞法作用域的唯一方法。它仍然可以正常工作,但不會將其存儲爲對象屬性:http://jsbin.com/iluse3 – 2010-07-13 21:22:06

0

爲什麼不使用內建的運算符來檢查等價性? is方法旨在測試jQuery對象上的選擇器,而不是測試常規對象或變量的等價性。

相反的:

if ($(StepOfThree).is(1))

用途:

if (StepOfThree === 1) {

+0

我已更新它,但鏈接#2和鏈接#3仍然不起作用...您能解釋原因嗎? – 2010-07-13 17:32:05

0

您需要刪除您瓦爾

<script> 
    $(document).ready(function() { 
     $('#show').hide(); 
     var StepOfThree = 0; 

     $('#linkone').mouseover(function() { 
      StepOfThree = 1; 
     }); 

     $('#linktwo').mouseover(function() { 
      if (StepOfThree == 1) { 
       StepOfThree = 2; 
      } else { 
       StepOfThree = 0; 
      } 
     }); 

     $('#linkthree').mouseover(function() { 
      if (StepOfThree == 2) { 
       $('#show').show(); 
      } else { 
       StepOfThree = 0; 
      } 
     }); 
    }); 
</script> 

要包括jQuery的吧?

0

你已經重新聲明瞭你的變量,覆蓋了它的範圍。

... 
    var StepOfThree = 0; 

    $('#linkone').mouseover(function() { 
     var StepOfThree = 1; 
    }); 
    ... 

有兩個變量,都命名爲'StepOfThree'。爲了解決這個問題,除了第一個聲明之外,除去所有的'var'。

+0

我已經更新了代碼...您可以再看一下嗎?因爲它不適用於LInk2和3 ... – 2010-07-13 17:29:43

+0

名爲「StepOfThree1」的變量?使用原始名稱。 – 2010-07-13 19:30:39

0

發生什麼事是您的StepOfThree變量不是全局變量 - 它在$(document).ready函數中。在外部聲明: 腳本打開標記 var StepOfThree = 0; $(document).ready stuff

+0

沒有。它比那更微妙。 – 2010-07-13 18:49:20