您可以通过取消slide
活动return false;
。
请参阅jsfiddle 上的此链接。
function setValues(stepIncrease) {
return function (event, ui) {
var slider = $("#" + this.id);
var currentValues = slider.slider("values");
var step = slider.slider("option")["step"];
if ((Math.abs(ui.values[0] - currentValues[0]) % (stepIncrease * step) != 0 || Math.abs(ui.values[1] - currentValues[1]) % (stepIncrease * step) != 0)){
return false;
};
slider.slider("values", ui.values);
var currentValues = slider.slider("values");
$("#" + this.id + "-values").html(currentValues[0] + ' ' + currentValues[1]);
};
};
在滑块中:
$(function() {
$( "#slider-range-1-2" ).slider({
range: true,
min: 1,
max: 10,
step: 1,
values: [1, 10],
slide: setValues(2),
create: function(event, ui) {
var slider = $("#" + this.id);
var currentValues = slider.slider("values");
$("#" + this.id + "-values").html(currentValues[0] + ' ' + currentValues[1]);
}
});
});
UPD
这是处理keydown
事件 的函数
function eventHandlerKeydown(slider, stepIncrease) {
return function(event) {
var step, curVal, min, max, newVal, index = $( event.target ).data( "ui-slider-handle-index" );
switch (event.keyCode) {
case $.ui.keyCode.UP:
case $.ui.keyCode.RIGHT:
case $.ui.keyCode.DOWN:
case $.ui.keyCode.LEFT:
event.preventDefault();
if ( !slider.keySliding ) {
slider.keySliding = true;
$(event.target).addClass( "ui-state-active" );
}
break;
}
step = slider.slider("option")["step"];
max = slider.slider("option")["max"];
min = slider.slider("option")["min"];
curVal = slider.slider("values")[index];
switch ( event.keyCode ) {
case $.ui.keyCode.UP:
case $.ui.keyCode.RIGHT:
newVal = curVal + step * stepIncrease;
if ( newVal > max ) {
return;
}
slider.slider("values", index, newVal );
break;
case $.ui.keyCode.DOWN:
case $.ui.keyCode.LEFT:
newVal = curVal - step * stepIncrease;
if ( newVal < min ) {
return;
}
slider.slider("values", index, newVal );
break;
}
}
}
在滑块中:
$(function() {
var slider = $( "#slider-range" ).slider({
...
});
var handlers = slider.children("a");
$.each(handlers, function(index, handler) {
$(handler).off('keydown');
$(handler).on({keydown: eventHandlerKeydown(slider, 1)});
});
});
以及示例的链接。
PS我仍然认为有一个简单的解决方案。
如果您只想选择年份的开始或结束,我认为@user568109 是正确的
function showValues(event, ui) {
var values;
if (!ui.values) {
values = $("#" + event.target.id).slider("values");
} else {
values = ui.values;
}
if (values[0] == values[1]) {
return false;
} else {
var periodFrom;
values[0] % 1 == 0 ? periodFrom = 'beginnig of the year' : periodFrom = 'year-end';
var periodTo;
values[1] % 1 == 0 ? periodTo = 'beginnig of the year' : periodTo = 'year-end';
$("#" + event.target.id + "-values").html('From ' + periodFrom + ' ' + parseInt(values[0]) + '<br />to ' + periodTo + ' ' + parseInt(values[1]));
}
}
$(function() {
$( "#slider" ).slider({
range: true,
min: 2010,
max: 2013.5,
step: 0.5,
values: [2010, 2013.5],
slide: showValues,
create: showValues,
change: showValues
});
});
那里的例子