您需要存储该函数以便可以引用它,如下所示:
function myHandler(event, delta) {
$("#wavetextcontainer").unbind("mousewheel", myHandler);
var speed = 10;
var mySlider = $("#slider");
var sliderVal = mySlider.slider("option", "value");
sliderVal += (delta*speed);
if (sliderVal > mySlider.slider("option", "max")) sliderVal = mySlider.slider("option", "max");
else if (sliderVal < mySlider.slider("option", "min")) sliderVal = mySlider.slider("option", "min");
$("#slider").slider("value", sliderVal);
event.preventDefault();
// HERE I WANT TO REBIND THE EVENT:
$("#wavetextcontainer").bind("mousewheel", myHandler);
};
$("#wavetextcontainer").bind("mousewheel", myHandler);
通过这样做,您可以调用.bind() http://api.jquery.com/bind/稍后转到同一函数(您不能引用匿名函数)。您目前正在尝试拨打.bind() http://api.jquery.com/bind/ without一个处理任何事情的函数,这不起作用。这还有一个额外的优点,即能够将相同的函数引用传递给.unbind() http://api.jquery.com/unbind/所以它解除了绑定only那个处理程序,不是any mousewheel
处理程序。
或者,执行此操作without取消/重新绑定,如下所示:
$("#wavetextcontainer").bind("mousewheel", function (event, delta) {
event.preventDefault();
if($.data(this, 'processing')) return; //we're processing, ignore event
$.data(this, 'processing', true);
var speed = 10;
var mySlider = $("#slider");
var sliderVal = mySlider.slider("option", "value");
sliderVal += (delta*speed);
if (sliderVal > mySlider.slider("option", "max")) sliderVal = mySlider.slider("option", "max");
else if (sliderVal < mySlider.slider("option", "min")) sliderVal = mySlider.slider("option", "min");
$("#slider").slider("value", sliderVal);
$.data(this, 'processing', false);
});
这只是使用$.data() http://api.jquery.com/jQuery.data/用元素存储“我们正在工作”的数据条目,如果有任何东西在为真时命中此处理程序,它只会返回并忽略该事件。