2013-02-25 2 views
1

Я пробовал этот код. Он делает то, что когда кто-то щелкнет правой кнопкой мыши на первом текстовом поле, сдвиньте фокус на второй, так что, если он выберет опцию Paste из контекстного меню, текст будет вставлен во второй блок. A paste Событие прикреплено ко второму ящику для предупреждения Foo.Вставить событие аномалии с jQuery в Opera

<!DOCTYPE html> 
<html> 
<head> 
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"> 
</script> 
<script> 
$(document).ready(function(){ 

    $('.foo').contextmenu(function() { 
     $('.boo').select(); 
     return true; 
    }); 
$(".boo").bind("paste",function() { alert("Foo"); }); 
}); 
</script> 
</head> 
<body> 
<input type = 'text' class = 'foo' /> 
<input type = 'text' class = 'boo' /> 
</body> 
</html> 

Он отлично работает во всех браузерах, кроме Opera. Когда вы щелкните правой кнопкой мыши и вставьте некоторый текст в первом поле, для всех этих браузеров появится предупреждение. В Opera, если вы вставляете какой-либо текст непосредственно во 2-й ящик, появляется всплывающее предупреждение. Но если вы сделаете это с помощью первого окна, то есть переместите фокус на второй, щелкнув правой кнопкой мыши по первому, так что текст буфера обмена вставлен во второй, он не выдает предупреждение, хотя вы можете четко видеть что второй ящик получил фокус, и текст вклеивается там просто отлично. Может ли кто-нибудь сказать мне, в чем проблема, и как это исправить?

+0

паста evemt не поддерживается браузером Opera. Для Opera вы, вероятно, можете использовать событие мутации DOM, например. Событие DOMAttrModified. – dherbolt

+0

Но если событие 'paste' не поддерживается, как вызывается предупреждение, когда вы просто фокусируетесь на втором поле и вставляете в него текст напрямую, либо через CTRL-C CTRL-V, либо выбрав« Вставить »из контекстного меню после щелчка правой кнопкой мыши? – SexyBeast

+0

Хорошо, я не пользователь jquery, но могу себе представить, что в jQuery есть какое-то обходное/исправление для вставки, как в других фреймах. Попытайтесь исследовать, как он решается во внутренних функциях jquery. – dherbolt

ответ

1

Как вы можете видеть в this fiddle, Opera запускает событие paste на элемент, на который был сделан щелчок правой кнопкой мыши (при вставке текста, в который был перемещен фокус). Однако, как вы видите, here, событие input срабатывает в том элементе, где вы его ожидали.

Может ли кто-нибудь сказать мне, в чем проблема, и как его исправить?

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

+0

Я делаю это, чтобы пользователь не вводил никаких данных, кроме цифр. «CTRL-V» позаботится, часть контекстного меню оставлена. После переключения фокуса, я устанавливаю быстрый таймер, чтобы определить, является ли вложенный текст номером, если это так, переместите фокус обратно в первый квадрат и вставьте его туда. Это отлично работает с Firefox, Safari, Chrome и даже IE, как я могу заставить его работать в Opera? – SexyBeast

+0

Я бы предложил не использовать второй скрытый ввод вообще, а просто удалить недопустимый текст из ввода при вставленном там. Однако, как уже упоминалось, вы можете прослушивать событие 'input' для второго элемента для распознавания паст в Opera. – Bergi

+0

Спасибо, чувак! Событие 'input' работает отлично! – SexyBeast

Смежные вопросы