具有关联文本输入事件的 Jquery UI 范围滑块(失败)
我的网站上有一个范围滑块,用于显示最小-最大价格范围。滑块的两侧是两个文本输入框。我使用滑块创建了一个回调函数,该函数根据滑块内的 val 更改来调整文本框的 vals。
同时,我还想根据文本框值的变化来调整滑块的值。现在,我在文本输入上绑定的更改(也尝试了 keyup)事件不会更改两个范围滑块指针的值(位置)。这是怎么回事?
$('.price_slider').slider({orientation:"horizontal",range:true, animate:200,min:0,max:10000, step:100,value:0,values:[{{min_rent}},{{max_rent}}], slide:function(event,ui){
$('input#lower_bound').val(ui.values[0]);
$('input#upper_bound').val(ui.values[1]);
}
});
$('input#lower_bound').change(function(){
$('.price_slider').slider("values",[$(this).val(),$('input#upper_bound').val()]);
});
$('input#upper_bound').change(function(){
$('.price_slider').slider("values",[$('input#lower_bound').val(),$(this).val()]);
});
编辑——
马特,我看到了你的修订。只是好奇你的版本是否比我的更有效。我的似乎确实有效,但我显然不是专家:
$lower.add($upper).change(function () {
var lowEnd=parseInt($lower.val());
var highEnd=parseInt($upper.val());
if(highEnd>lowEnd){
$slider.slider('values', 0, parseInt($lower.val(), 10));
$slider.slider('values', 1, parseInt($upper.val(), 10));
}
else{
$slider.slider('values', 0, parseInt($lower.val(), 10));
$slider.slider('values', 1, parseInt($lower.val(), 10));
$upper.val([$lower.val()]);
}
});
I have a range slider on my site for min-max price ranges. On either side of the slider are two text input boxes. I've created a callback function with the slider which adjusts the vals of the text boxes based on a val change within the slider.
At the same time, I would also like to adjust the values of the slider based on changes to th vals of the text boxes. Right now, the change (also tried keyup) event that I'm binding on the text inputs are not changing the values (position) of the two range slider hands. What's wrong here?
$('.price_slider').slider({orientation:"horizontal",range:true, animate:200,min:0,max:10000, step:100,value:0,values:[{{min_rent}},{{max_rent}}], slide:function(event,ui){
$('input#lower_bound').val(ui.values[0]);
$('input#upper_bound').val(ui.values[1]);
}
});
$('input#lower_bound').change(function(){
$('.price_slider').slider("values",[$(this).val(),$('input#upper_bound').val()]);
});
$('input#upper_bound').change(function(){
$('.price_slider').slider("values",[$('input#lower_bound').val(),$(this).val()]);
});
EDIT--
Matt, I saw your revision. Just curious if your version is more efficient than mine. Mine does seem to be working but I'm clearly not an expert:
$lower.add($upper).change(function () {
var lowEnd=parseInt($lower.val());
var highEnd=parseInt($upper.val());
if(highEnd>lowEnd){
$slider.slider('values', 0, parseInt($lower.val(), 10));
$slider.slider('values', 1, parseInt($upper.val(), 10));
}
else{
$slider.slider('values', 0, parseInt($lower.val(), 10));
$slider.slider('values', 1, parseInt($lower.val(), 10));
$upper.val([$lower.val()]);
}
});
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
根据 jQuery UI 文档,
slider('values') 将索引作为第二个参数,将值作为第三个参数。试试这个:
According to the jQuery UI documentation,
slider('values')
takes index as the second param and value as the third. Try this:对于多手柄滑块,您需要使用
'values'
而不是'value'
(您正在执行的操作),而是使用'values'< /code> 采用以下格式:
在根据文本框设置滑块值时,您可能希望强制执行
max >= min
。.slider()
,我不知道{{...}}
废话来自哪里(是一个 jQuery 模板吗? ?)。-
而不是_
。修复:
演示:http://jsfiddle.net/mattball/pLP2e/
For multi-handle sliders, you need to use
'values'
rather than'value'
(which you're doing) but'values'
takes this format:You probably want to enforce
max >= min
when setting the slider values based on the textboxes..slider()
incorrectly, I don't know where that{{...}}
nonsense came from (is that a jQuery template?).-
instead of_
.The fixes:
Demo: http://jsfiddle.net/mattball/pLP2e/