2013-05-10 75 views
0

我正在構建一個小冒險,以幫助我理解JQuery/Javascript的一些概念,並且我遇到了一些障礙。麻煩點擊不解綁

我想要做的是通過點擊「獲取」按鈕,然後在屏幕上的項目將其移動到清單。好消息是,所有的作品。壞消息是,如果我先按下另一個項目而不先使用「take」按鈕,它會直接進入我的庫存。

與「看」相同的問題。您應該首先按下「外觀」,然後再按下該項目才能獲得描述,但一旦按下,它會立即爲每個項目點擊描述。

你可以想象,一旦你點擊了每一個你點擊的物品而沒有點擊另一個按鈕,它會給你一個描述,並直接在你的庫存中結束。

這是我正在努力得到它的解除綁定:

$("#take").click(function() { 
    $("#zilverenKogel").click(function() { 
     $("#zilverenKogel").fadeOut(1200, 0); 
     $("#invKogel").fadeTo(1500, 1); 
     $("#take").unbind("click"); 

任何幫助將不勝感激!

Mofx爲我解決了它。結束和工作結果是:

var state = null; 
$("#take").click(function() {state = "take";}) 
$("#look").click(function() {state = "look";}) 


$("#zilverenKogel").click(function() { 
    if (state == "take") { 
     $("#zilverenKogel").fadeOut(1200, 0); 
     $("#invKogel").fadeTo(1500, 1); 
     state=null; 
    } else if (state == "look") { 
     alert("blablabla"); 
     state=null; 
    } 

}); 

非常感謝Mofx!

+0

這不解除綁定你在控制檯有錯誤 – 2013-05-10 13:50:43

+0

您是否嘗試過使用和關閉功能? – 2013-05-10 13:53:04

+0

對我來說似乎很好http://jsfiddle.net/arunpjohny/kQQ3x/1/ – 2013-05-10 13:55:07

回答

3

您解除了錯誤的事件。你想解除「#zilverenKogel」上的事件,因爲那是做「採取行動」的。我也懷疑,你將事件連接到其他元素以及「$(」#take「)。click(function(){」。你將不得不全部斷開它們。在採取行動或其他行動後選擇

也許的statemachine會在這裏更好的解決方案是這樣的:。。?

var state = null; 
$("#take").click(function() {state = "take";} 
$("#look").click(function() {state = "look";} 

$("#zilverenKogel").click(function() { 
    if (state == "take") { 
    moveToInventory(); 
    } else if (state == "look") { 
    showDescription(); 
    } 
} 
+0

使用狀態*通常是要走的路,比綁定和解除綁定更好,+1。 – 2013-05-10 14:08:08

+0

啊,是的,這可能就是我剛剛改變#zilverenKogel時不工作的原因。 – Timsalabim 2013-05-10 14:09:09

+0

該狀態解決方案看起來好像更好。我要實現這一點,看看我能否實現它。將讓你知道這是如何解決我的。 – Timsalabim 2013-05-10 14:11:18