我使用的是优秀的jQuery插件旋钮 。 然而,我需要动态启用/禁用依赖于用户输入的元素。 存在用于具有支撑disabled
其上有没有鼠标(或触摸)的事件被绑定到画布元件的效果页面负载状态。 有谁知道如何解决这个问题,那就是如何(在页面加载)绑定和取消绑定这些鼠标事件监听器?
理想情况下,我想这样做(在禁用旋钮)
$('.button').click(function() {
$('.knob').enable();
});
编辑:我结束了重写结合/解除绑定鼠标和触摸事件源。 该解决方案是不完美的,所以我没有解决这一问题,如果有人也许有一个更好的(清洁剂)的解决方案。
HTML
<input class="knobSlider" data-readOnly="true">
<button id="testBtn">clickHere</button>
脚本
在文档准备,
$(".knobSlider").knob();
$("#testBtn").click(function(){
$(".knobSlider").siblings("canvas").remove();
if($(".knobSlider").attr("data-readOnly")=='true'){
$(".knobSlider").unwrap().removeAttr("data-readOnly readonly").data("kontroled","").data("readonly",false).knob();
}
else{
$(".knobSlider").unwrap().attr("data-readOnly",true).data("kontroled","").data("readonly",true).knob();
}
});
仅供参考,你可以用我的jsfiddle链接> http://jsfiddle.net/EG4QM/ (在Firefox中检查这一点,因为在铬一些外部资源负载的问题)
如果有人不喜欢接受的答案是如何破坏并重新创建内部canvas元素,然后结帐我的方法:
https://jsfiddle.net/604kj5g5/1/
从本质上讲,检查draw()
实现(我还建议监听的价值变动draw
方法而不是change
和release
,为此,工作和click
和mousewheel
分别事件,海事组织不方便)。
var $input = $("input");
var knobEnabled = true;
var knobPreviousValue = $input.val();
$input.knob({
draw: function () {
if (knobPreviousValue === $input.val()) {
return;
}
if (!knobEnabled) {
$input.val(knobPreviousValue).trigger("change");
return;
}
knobPreviousValue = $input.val();
console.log($input.val());
},
});
试试这个来禁用该控件。 我仍然试图找到一种方法,使回
$("#btnDisable").click(function(){
$("#knob").off().prev().off();
});