为什么我可以关闭mousedown事件,而不是它的链式鼠标事件?

时间:2017-01-19 00:59:46

标签: jquery chaining mousedown event-listener mouseup

我有两个链式鼠标事件:

$('body > form').on("mousedown", function(e){ 
    //Do stuff 
}).on("mouseup", function(){
    /*More stuff, including
       window.addEventListener(...
    */  
});

但是,当我尝试off()来自其他外部函数时,我只能off() mousedown,而不是mouseup,其功能继续有效。

嵌套addEventListener是否可以阻止我离开它的活动? (

顺便说一下,我并不重要 链:($().off().off();)或unchain($().off(); $().off();),或组合($().off(A B);)或反向(A B - B A)元素;始终如一,off(mousedown)有效,但从不off(up)

这是我的完整JS代码:

(问题部分是第二个脚本,最后:)

<script>
function comment() {

    $('body > form').on("mousedown.markerPlacer", function(e){   
     //Place the cursor marker on the screen 

        var newComment2 = $('<div id="newComm" class="marker" class="deg45" &uarr;</div>');
        $('form').append(newComment2);  

    }).on("mouseup", function(){   
    //Now use the Q-key to rotate the marker.

       window.addEventListener("keydown", extraKey, false); 
       window.addEventListener("keyup", keysReleased2, false); 

            function extraKey(e) {
                var deg = e.keyCode;  
                    if (deg == 81)  { //81 is the keycode, which codes for Q
                        $('#newComm').attr('class', 'marker').addClass('deg0'); 
                    } else {
                        return false;
                    };  
                    e.preventDefault(); 
            };                 
            function keysReleased2(e) {
                e.keyCode = false;
            };
    });  
};
</script>

<script>
function dismissComment() {
        $('body > form').off("mousedown mouseup");    
}
</script>

1 个答案:

答案 0 :(得分:1)

出于好奇,我写了一个类似链式的mousedown和mouseup,如你的代码所示 然后我点击按钮取消绑定它们。 它似乎工作正常,我无法重现你的问题 它能够&#34;关闭&#34; mousedown和mouseup事件监听器。

$("#testMe")
  .on("mousedown", function(e) {
    appendText(getButton(e.button) + " | " + $(this).attr("id") + " | " + "mouseDOWN | " + new Date());
  })
  .on("mouseup", function(e) {
    appendText(getButton(e.button) + " | " + $(this).attr("id") + " | " + "mouseUP | " + new Date());

    $(document).off("keydown keyup");
    $(document).on("keydown", keydown_pressed);
    $(document).on("keyup", keyup_pressed);
  });

解开/&#34;关闭&#34;代码

$("#unbind").click(function(e) {
  $("#testMe").off("mousedown mouseup");
  $(document).off("keydown keyup");
});

页面加载上,mousedown和mouseup将附加到输入文本框。

page load event listener - textbox

鼠标点击文本框后,添加了窗口keydown和keyup事件侦听器。

document keydown and keyup event

&#34; off&#34;或取消绑定,删除所有事件侦听器。

after unbind

jsfiddle link