反向e.preventdefault?

时间:2014-03-21 14:50:45

标签: javascript jquery events jquery-mobile

我有以下代码:

$(document).bind('panelopen', function (e, data) {     
    $('#ReleaseTransactionsPageContent').on('touchstart touchmove', function(e){ 
         e.preventDefault(); 
    });
});

它的功能是防止面板打开时滚动。在面板关闭时,我想取消绑定preventdefault并重新启用touchstart和touchmove。

$(document).bind('panelclose', function (e, data) {     
    $('#ReleaseTransactionsPageContent')....not sure what to put here
});

5 个答案:

答案 0 :(得分:1)

使用.off()删除事件处理程序。

$('#ReleaseTransactionsPageContent').off('touchstart touchmove'); //remove previous attached handler
$('#ReleaseTransactionsPageContent').on('touchstart touchmove',function(){ //attach new handler
   //code here
});

答案 1 :(得分:0)

你正在寻找

.off()

$(document).bind('panelclose', function (e, data) {     
    $('#ReleaseTransactionsPageContent').off('touchstart touchmove');
});

答案 2 :(得分:0)

假设您使用的是jQuery> = 1.7,请使用.on().off()。您可以使用名称间隔事件名称来注册/取消注册处理程序,因为只需调用.off('touchstart touchmove')即可删除所有其他touchstarttouchmove事件,这些事件可能已被其他人注册

$(document).on('panelopen', function (e, data) {
    $('#ReleaseTransactionsPageContent').on('touchstart.ReleaseTransactionsPageContent touchmove.ReleaseTransactionsPageContent', function (e) {
        e.preventDefault();
    });
});
$(document).bind('panelclose', function (e, data) {
    $('#ReleaseTransactionsPageContent').off('touchstart.ReleaseTransactionsPageContent touchmove.ReleaseTransactionsPageContent')
});

答案 3 :(得分:0)

使用off method删除事件处理程序:

$('#ReleaseTransactionsPageContent').off('touchstart touchmove');

答案 4 :(得分:0)

<script>
    // Get touch move event from IOS
    document.ontouchmove = function (event) {
        if (!event.elementIsEnabled)
            event.preventDefault();
    };

    // Get touch move event from IOS
    function enableOnTouchMove(event) {
      event.elementIsEnabled = true;
    };
</script>

然后在你想要的每个标签上启用ontouchmove。即:

<div ontouchmove="enableOnTouchMove(event)" id="listing">