代码之家  ›  专栏  ›  技术社区  ›  qadenza

如何防止开关E内的默认值。

  •  2
  • qadenza  · 技术社区  · 6 年前

    为什么? preventDefault() case 3 不管用吗?右键单击时不应出现浏览器菜单。

    $('#btnB').on('mousedown', function(e){
    	switch (e.which) {
    	case 1:
    		console.log('left');
    		break;
    	case 3:
    		e.preventDefault();
    		console.log('right');
    		break;
    	default:
    		alert('323');
    	}
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <button id='btnB'>CLICK</button>
    3 回复  |  直到 6 年前
        1
  •  2
  •   ACD    6 年前

    与@dfsq的答案相同,但在contextmenu上有双触发器的catch。由于某种原因,我无法编辑他的答案,我想演示一下。

    $('#btnB').on('contextmenu mousedown', function(e) {
      switch (e.which) {
        case 1:
          console.log('left');
          break;
        case 3:
          if (e.type !== 'contextmenu') break;
          e.preventDefault();
          console.log('right');
          break;
        default:
          alert('323');
      }
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <span id="btnB">HAHAHA</span>
        2
  •  2
  •   Pingolin BenJ    6 年前

    出现上下文菜单是因为它对不同的事件做出反应,而不是鼠标向下。试着听两个 mousedown (甚至可能不需要)和 contextmenu 事件:

     $('#btnB').on('mousedown contextmenu', function(e){
      switch (e.which) {
      case 1:
        console.log('left');
        break;
      case 3:
        e.preventDefault();
        console.log('right');
        break;
      default:
        alert('323');
      }
    });
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    <button id='btnB'>CLICK</button>
        3
  •  1
  •   Ced    6 年前

    如果要阻止上下文菜单打开,可以通过侦听ContextMenu事件来打开上下文菜单。

    $('#btnB').on('contextmenu', function(e) {
                alert("hey new menu"); 
                e.preventDefault();
            });