为什么我的 ASP.NET jQuery RadSlider 箭头点击事件没有触发?

Why is my ASP.NET jQuery RadSlider arrow click event not firing?

我在 jQuery 1.10.2 中使用 Telerik RadSlider。目前我正在捕获 2 个事件:

  1. OnClientValueChanged:单击 up/down 箭头手柄或拖动滑块正在移动时触发。
  2. OnClientSlideEnd:拖动滑块完成移动时触发(但在单击箭头手柄时不触发)。

我的问题是如何检测何时仅单击 up/down 箭头手柄?显然,我可以只连接到 OnClientValueChanged(上面的第一个事件)并调用连接到 OnClientSlideEnd(第二个事件)的函数,但是由于每次触发 OnClientSlideEnd 时我都在进行计算并将值保存到数据库中,这将是难以置信的每次拖动滑块手柄时进行计算和保存这些值的效率很低。

这是我当前的 RadSlider 设置。请注意句柄是动态生成的,但在检查 Chrome 中的元素时,它的 class 为 "rslHandle":

$(document).ready(function myfunction() {
  $('.rslHandle, .rslHorizontal, .RadSlider').live('click', 'body', function () {
    alert('arrow clicked');
  });
});
<telerik:RadSlider ID="radSliderTest" runat="server" CssClass="CustomSliderLook" OnClientValueChanged="OnClientSlideChanged" OnClientSlideEnd="OnClientSlideEnd" MaximumValue="100" TrackMouseWheel="true" Width="300px" />

我试过过时的 "live click"、"on click",只触发了普通的 "click" 方法和 none。查看 Telerik 的 RadSlider 事件文档,除了发布的 here 之外,我没能找到任何关于箭头变化事件的信息。非常感谢您的帮助!

好的,我找到了解决方案。它通过像这样捕获 mouseup 事件来工作:

$(".rslHandle").live('mouseup', function (e) {
    alert('arrow clicked');
});

我刚刚尝试了 click() jQuery 附加到点击事件的方式:

    function pageLoad() {
        $telerik.$(".rslHandle").click(function () { alert(1); });
    }

它使用 Sys.Application.Load(像这样的 IScriptControls 首选)。

    $telerik.$(document).ready(function () {
        $telerik.$(".rslHandle").click(function () { alert(1); });
    });

在 document.ready jQuery 事件中附加了一个匿名函数。

两者都使用 jQuery Telerik 提供的。

您可以级联选择器 and/or 使用滑块本身的 OnClientLoad 事件,这样您就可以知道创建滑块的 HTML 元素是哪个。

不过,我不确定为什么您不适合使用内置事件。如果您需要最终值,无论最终用户更改了多少次,为什么不直接使用服务器上的 radSliderTest.SelectedValue 属性?最终,页面将被 POST 编辑,这样您就可以获得其余的文本框、下拉列表等,这样您就可以利用这一刻在服务器上获取滑块值,而无需任何额外的代码。滑块还提供 AutoPostBack 属性 因此当用户更改值时,它可以 POST 页面并触发 OnValueChanged 服务器事件。