Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery UI-滑块在一次使用后解除绑定_Javascript_Jquery_Jquery Ui - Fatal编程技术网

Javascript jQuery UI-滑块在一次使用后解除绑定

Javascript jQuery UI-滑块在一次使用后解除绑定,javascript,jquery,jquery-ui,Javascript,Jquery,Jquery Ui,我还是个新手,所以请对我放松点 我正在做一个JavaScript游戏。游戏运行良好,用户界面的基本功能也很好,比如选择菜单或切换屏幕。但我也尝试在我的一个选项菜单中实现jQuery UI滑块,这正是我遇到麻烦的地方 我只能使用滑块一次,之后它会“卡住”。它会对鼠标上方做出响应-它会高亮显示,好像它准备滚动-但如果我再次尝试移动它,它不会移动 到目前为止,我已经排除了我正在使用的jQuery/jQUI构建的任何问题;演示页面运行良好 我不知道可能是什么问题,但我怀疑这与我组装UI的方式有关。我的U

我还是个新手,所以请对我放松点

我正在做一个JavaScript游戏。游戏运行良好,用户界面的基本功能也很好,比如选择菜单或切换屏幕。但我也尝试在我的一个选项菜单中实现jQuery UI滑块,这正是我遇到麻烦的地方

我只能使用滑块一次,之后它会“卡住”。它会对鼠标上方做出响应-它会高亮显示,好像它准备滚动-但如果我再次尝试移动它,它不会移动

到目前为止,我已经排除了我正在使用的jQuery/jQUI构建的任何问题;演示页面运行良好

我不知道可能是什么问题,但我怀疑这与我组装UI的方式有关。我的UI的工作方式是创建一个“视图”对象,其中包含指向父DOM元素的指针。然后,我使用jQuery构造其子元素,并使用“loadElement”方法将其添加到视图的子元素列表中:

function CView (parent, target, visible, jQElements) {
  this.parent = parent;
  this.visible = visible;
  this.parentDisplay = parent.css("display");
  this.parentPosition = parent.css("position");
  this.elements = [];
  for(element in jQElements) {
    this.elements.push(element);
  }
  if (!this.visible) {
    this.parent.css({ // Default to hidden state
      "opacity": 0,
      "display": "none"
    });
  }
  this.parent.appendTo(target);
};

CView.prototype.loadElement = function(element) {
  element.appendTo(this.parent);
  this.elements.push(element);
  return element;
};
所有这些元素都可以与视图对象上的方法调用一起显示和隐藏。当前,隐藏视图会解除该视图元素中所有事件侦听器的绑定。我不认为这是问题所在,因为我在创建新视图后立即遇到了这个问题

我认为,问题可能出在这段代码中,这段代码用于交换视图——也许我正在解除jQUI使用的某种文档级侦听器的绑定

var swapView = GameUI.swapView = function(view, callbacks) {
    $(document).off(); // unbind key listeners
    currentView && currentView.hideView(); // also unbinds event listeners
    currentView = view;
    view.showView(callbacks);
};
还有一件事可能是相关的,我构造滑块并将其放入的方式:

  var $volumeSlider = jQuery("<div/>", {
    class: "options-menu-volume-slider"
  });
  var resetVolumeSlider = function () {
    $volumeSlider.slider({
      range: "min",
      value: GameUI.options.volume,
      min: 0,
      max: 100
    })
  };
  resetVolumeSlider();
var$volumeSlider=jQuery(“{
类:“选项菜单音量滑块”
});
var resetVolumeSlider=函数(){
$volumeSlider.slider({
射程:“分钟”,
值:GameUI.options.volume,
分:0,,
最高:100
})
};
重置体积滑块();

如果您需要查看更多代码,请告诉我。我真的不确定这里出了什么问题。非常感谢您的帮助。(另外,我不知道如何在线主持我的游戏来演示它。它基本上只是一个运行大量JS的HTML页面。)

结果表明,这个问题是由我调用
$(document).off()
引起的,我使用它来删除可能悬空的文档级按键处理程序。不幸的是,这也破坏了jQuery UI的事件处理程序

将来,我的视图将在父div级别绑定按键,并为每个
div
设置选项卡索引,这样我就不必调用
$(document).off()
,只需使用
hideView()
来解除绑定。

JSFIDLE(提供问题所需的代码最少)将极大地帮助我们。