jQuery: preventDefault () не работающий над событиями входа/щелчка?

Я хочу отключить значение по умолчанию contextMenu, когда пользователь щелкает правой кнопкой по полю ввода так, чтобы я мог показать пользовательский contextMenu. Вообще говоря, его довольно легкое для отключения контекстного меню путем выполнения чего-то как:

$([whatever]).bind("click", function(e) { e.preventDefault(); });

И на самом деле, я могу сделать это на примерно каждом элементе ЗА ИСКЛЮЧЕНИЕМ полей ввода в FF - кто-либо знает, почему или мог указать на меня к некоторой документации?

Вот соответствующие нормы, я работаю с, парни спасибо.

HTML:

<script type="text/javascript">
 var r = new RightClickTool();
</script>

<div id="main">
  <input type="text" class="listen rightClick" value="0" />  
</div>

JS:

function RightClickTool(){

var _this = this;
var _items = ".rightClick";

$(document).ready(function() { _this.init(); });

this.init = function() {
 _this.setListeners(); 
}

this.setListeners = function() {
 $(_items).click(function(e) {
  var webKit = !$.browser.msie && e.button == 0;
  var ie = $.browser.msie && e.button == 1;

  if(webKit||ie)
  { 

   // Left mouse...do something()

  } else if(e.button == 2) {
   e.preventDefault(); 

   // Right mouse...do something else();
  }

 });
}

} // Ends Class

Править:

Извините, после чтения комментариев я понимаю, что должен разъяснить несколько вещей.

1) Код выше действительно работает... в некотором смысле. Код может отсортировать, какая кнопка была нажата, это просто не заботится, что я говорю, что e.preventDefault () и контекстное меню все еще открывается. Другими словами, при помещении предупреждения на e.button, Вы получили бы свой 1 или 0 для левого и 2 для права..., но это просто смеется надо мной и все еще показывает проклятое меню по умолчанию!

2) Если я поместил селектор jQuery на Какой-либо другой элемент (кроме входа) затем, все будет работать, FF будет уважать preventDefault (), вызов и контекстное меню по умолчанию не покажут.

9
задан Jason 29 April 2010 в 18:26
поделиться

2 ответа

Извините, ребята, я знаю, что это отговорка, потому что я так и не смог понять, почему браузеры webkit не любят, когда вы возитесь с событиями поля ввода но как бы то ни было, это работает. Итак, решение состоит в том, чтобы применить слушателя ко всему окну, а затем просто спросить, есть ли у цели класс, к которому вы хотите применить эффект ... и перейти оттуда. Честно говоря, это, вероятно, лучшее решение в любом случае, потому что для моего конкретного приложения это позволяет мне применять эту функциональность к любому элементу, который я хочу.

var _class = "input.hideRightClick";

this.setListeners = function() {
    $(window).click(function(e) {
        if($(e.target).is(_class))
        {
            e.preventDefault(); 
            alert("hide!");
        }
    });
}
3
ответ дан 4 December 2019 в 13:46
поделиться

Я только что протестировал Firefox 3.6, и он переходит к первому оператору if, поэтому e.preventDefault () никогда не вызывается.

  var webKit = !$.browser.msie && e.button == 0; // TRUE IN FIREFOX 3.6

  var ie = $.browser.msie && e.button == 1;

  if(webKit||ie)
  { 

   // Left mouse...do something()

  } else if(e.button == 2) {
   e.preventDefault(); 

   // Right mouse...do something else();
  }
0
ответ дан 4 December 2019 в 13:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: