Вам нужно сохранить функцию, на которую вы можете ссылаться, например:
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()
позже к той же функции (вы не можете ссылаться на анонимную). В настоящее время вы пытаетесь вызвать .bind()
без функцию для обработки чего-либо, что не работает. Это также имеет дополнительное преимущество, заключающееся в возможности передавать ту же ссылку на функцию в .unbind()
, поэтому она отменяет привязку only к этому обработчику, а не any mousewheel
.
В качестве альтернативы, сделайте это без отмены / повторной привязки, например:
$("#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()
для хранения записи данных "мы работаем" с элементом, если что-то попадает в этот обработчик, пока оно истинно, оно просто возвращает и игнорирует событие.