如何判断jQuery滑块(旋钮)是否聚焦?

时间:2012-01-22 06:08:54

标签: jquery ajax jquery-ui focus jquery-ui-slider

我有一个带有jQuery滑块的页面,移动这些滑块会将值发送到服务器。同时,每秒查询服务器以获取当前状态(对于页面上的所有字段)。

所以我需要知道滑块(旋钮)是否被聚焦,或者是否被玩弄,因此设置从服务器返回的值的ajax代码可以避免尝试设置聚焦滑块。否则它会在尝试移动滑块时反弹。

当前代码:

// Called by ajax's return from server, v is the server's value, to set on this slider
function ReportObjectSize (v)
{
    $('#slider_objsize').slider("option", "value", v);
}

我认为我需要的是:

function ReportObjectSize (v)
{
  if (!$('#slider_objsize').slider.IsFocused()) // Some way to tell if it's focused
    $('#slider_objsize').slider("option", "value", v);
}

或者通常有更好的方法来做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以查看#slider_objsize .ui-slider-handle:focus是否与任何内容匹配:

if($('#slider_objsize .ui-slider-handle:focus').length)
    // The handle has focus.
else
    // The handle doesn't have focus.

演示:http://jsfiddle.net/ambiguous/YKRme/1/

请注意,jQuery 1.6中添加了:focus selector,因此上述版本不适用于早期版本的jQuery。

或者,您可以挂钩startstop事件,以跟踪用户何时开始和停止摆弄滑块:

var sliding = false;
$("#slider_objsize").slider({
    // ...
    start: function() { $('#slider_objsize').data('sliding', true ) },
    stop:  function() { $('#slider_objsize').data('sliding', false) },
});

然后看看$('#slider_objsize').data('sliding'),看看他们是否在摆弄它。

演示:http://jsfiddle.net/ambiguous/Gn5cX/