0

我正在构建一个小冒险来帮助我理解 JQuery/Javascript 的一些概念,但我遇到了一个障碍。

我正在尝试做的是通过单击“获取”按钮,然后单击屏幕上的一个项目将其移动到库存中。好消息是,一切正常。坏消息是,如果我在没有先使用“获取”按钮的情况下按下另一个项目,它会直接进入我的库存。

“看”也有同样的问题。您应该先按“查看”,然后按项目来获取描述,但是一旦按下它,它会立即为您单击描述的每个项目提供。

您可以想象,一旦您同时按下了它们,您在不点击另一个按钮的情况下点击的每个项目都会为您提供描述并立即进入您的库存。

这就是我试图让它解除绑定的方式:

$("#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!

4

1 回答 1

3

你解绑了错误的事件。您想取消绑定“#zilverenKogel”上的事件,因为那是执行“采取行动”的事件。

我还怀疑,您在“$("#take").click(function () {" 中也将事件连接到其他元素。您必须将它们全部断开。在采取行动或选择其他行动之后。

也许状态机在这里会是一个更好的解决方案。就像是:

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();
  }
}
于 2013-05-10T13:54:15.550 回答