Javascript函数没有注册keypress

时间:2018-03-28 12:01:14

标签: javascript jquery

我正在尝试按下回车键时获取停止的功能但由于某种原因它没有将我的enter变量的开关从false注册为true。我不知道这是一个范围问题还是一个关闭问题或一个具有约束力的问题,我在整个论坛中看了一遍,尝试了一堆不同的解决方案,但似乎没有任何工作......

function positionArrow(arrow) {
  var enter = false;
  $(document).keypress(function(e) {
      if(e.which == 13) {
        enter = true;
      }
  });
  console.log(enter);
  if (enter == true) {
    return;
  } else {
    $(arrow.element).css({
        left: arrow.x - arrowWidth / 2,
        top: arrow.y - arrowHeight / 2
      });
    rotate(arrow.element, arrow.angle);
  }
}

2 个答案:

答案 0 :(得分:0)

您应该在处理程序中运行代码,并且处理程序应该在“positionArrow”函数之外。尝试用

替换enter = true;
$(arrow.element).css({
    left: arrow.x - arrowWidth / 2,
    top: arrow.y - arrowHeight / 2
});
rotate(arrow.element, arrow.angle);

将处理程序声明移到函数之外。代码应如下所示

  $(document).keypress(function(e) {
      if(e.which == 13) {
        positionArrow(arrow);
      }
  }
  function positionArrow(arrow) {
    $(arrow.element).css({
        left: arrow.x - arrowWidth / 2,
        top: arrow.y - arrowHeight / 2
      });
    rotate(arrow.element, arrow.angle);
   }

答案 1 :(得分:0)

我设法让它使用下面的方法。我使enter成为一个全局变量并创建了一个单独的函数。虽然这有效,但我觉得可能有更好的解决方案,或者更好地阐明问题的开始。

var enter = false;    

function stopArrow(){
    $(document).keypress(function(e) {
        if(e.which == 13) {
          enter = true;
        }
    });
}

stopArrow();

function positionArrow(arrow) {
  if (enter == true) {
    return;
  } else {
    $(arrow.element).css({
        left: arrow.x - arrowWidth / 2,
        top: arrow.y - arrowHeight / 2
      });
    rotate(arrow.element, arrow.angle);
  }
}