Javascript Opera中的onpaste解决方案<;=11.11
Javascript Opera中的onpaste解决方案<;=11.11,javascript,jquery,onpaste,Javascript,Jquery,Onpaste,onpaste在Opera中不起作用 有人能为这项任务提出更好的解决方案吗 因为我不喜欢这样,所以我必须使用setInterval/setTimeout并模拟更改事件。 因为如果使用triggerHandler('change')会在用户模糊时触发第二个事件,我不知道为什么实际上不应该这样做,因为在第一次triggerHandler('change')之后数据不会更改 需要一个解决方案来捕获val()在用户退出textarea之前,还应该捕获鼠标粘贴。您不能,它根本不受支持。我能想到的唯一解决办
onpaste
在Opera中不起作用
有人能为这项任务提出更好的解决方案吗
因为我不喜欢这样,所以我必须使用setInterval
/setTimeout
并模拟更改事件。
因为如果使用triggerHandler('change')
会在用户模糊时触发第二个事件,我不知道为什么实际上不应该这样做,因为在第一次triggerHandler('change')之后数据不会更改
需要一个解决方案来捕获val()
在用户退出textarea之前,还应该捕获鼠标粘贴。您不能,它根本不受支持。我能想到的唯一解决办法是使用setInterval
来检测此类更改。我知道这已经晚了一点,但我一直在努力在浏览器中捕获粘贴事件。我仍在编写代码,但到目前为止我所拥有的是
守则的要点如下:
$('#sometextarea')
.change(function(){console.log($(this).val());})
[0].onpaste=function(){
var self=$(this);
var intr=setInterval(function(){
if(self.val().length) {
clearInterval(intr);
self.blur();
}
},10);
}
$(文档).ready(函数(){
//假膏
var doFakePaste=false;
$(文档).on('keydown',函数(e){
$('#status').html('metaKey:'+e.metaKey+
“ctrlKey:”+e.ctrlKey+
“which:”+e.which);
//这些浏览器可用于真正的粘贴事件
如果($.client.browser==“Chrome”)
返回;
如果($.client.os==“Windows”&&$.client.browser===“Safari”)
返回;
//检查patse keydown事件
如果(!doFakePaste&&
($.client.os==“Mac”和&e.which==86和&e.metaKey)||
($.client.os!=“Mac”和&e.which==86和&e.ctrlKey)){
doFakePaste=true;
//有浆糊吗
如果(!$(“*:焦点”).is(“输入”)&&
!$(“*:焦点”).is(“文本区域”)){
$('#status').html('假粘贴');
//聚焦屏幕外的可编辑对象
$(“#TribblePaste”).focus();
//Opera不支持onPaste事件,因此我们有
//使用超时获取粘贴
如果($.client.browser==“Opera”)
{
setTimeout(函数(){
doFakePaste=false;
var html=$('#TribblePaste').html();
var text=$('#TribblePaste').text();
如果(text='')text=$('#TribblePaste').val();
$('#resultA').text('[o]'+html);
$('#resultB').text('[o]'+text);
$('#TribblePaste').val('');
$('#TribblePaste')。文本('';
$('#TribblePaste').blur();
}, 1);
}
}
}
}).on('paste',函数(e){
//Firefox不受支持-它们不受支持
//公开真实的剪贴板
如果($.client.browser=='Firefox')
返回;
$('#status').html('粘贴事件');
//真正的粘贴
var html='';
var text='';
if(window.clipboardData)//IE
{
text=window.clipboardData.getData(“text”);
}
if(e.clipboardData&&e.clipboardData.getData)//标准
{
text=e.clipboardData.getData('text/plain');
text=e.clipboardData.getData('text/html');
}
如果(如originalEvent.clipboardData&&
e、 originalEvent.clipboardData.getData)//jQuery
{
text=e.originalEvent.clipboardData.getData('text/plain');
html=e.originalEvent.clipboardData.getData('text/html');
}
$('#resultA').text(html);
$('#resultB').text(text);
});
//设置屏幕外粘贴捕获区域
$('').css({
'位置':'绝对',
'顶部':'-100000像素',
“宽度”:“100px”,
“高度”:“100px”
}).on('paste',函数(e){
setTimeout(函数(){
doFakePaste=false;
var html=$('#TribblePaste').html();
var text=$('#TribblePaste').text();
如果(text='')text=$('#TribblePaste').val();
$('#resultA').text(html);
$('#resultB').text(text);
$('#TribblePaste').val('');
$('#TribblePaste')。文本('';
$('#TribblePaste').blur();
}, 1);
}).附于(“主体”);
$('#data').html('os:'+$.client.os+'浏览器:'+$.client.browser);
});
是的,我想这是唯一的解决办法。你能把它贴出来作为这个话题的答案吗?这样我就可以接受了?
$(document).ready(function() {
// Fake paste
var doFakePaste = false;
$(document).on('keydown', function(e) {
$('#status').html('metaKey: ' + e.metaKey +
' ctrlKey: ' + e.ctrlKey +
' which: ' + e.which);
// These browser work with the real paste event
if ($.client.browser === "Chrome")
return;
if ($.client.os === "Windows" && $.client.browser === "Safari")
return;
// Check for patse keydown event
if (!doFakePaste &&
($.client.os === "Mac" && e.which == 86 && e.metaKey) ||
($.client.os !== "Mac" && e.which == 86 && e.ctrlKey)) {
doFakePaste = true;
// got a paste
if (!$("*:focus").is("input") &&
!$("*:focus").is("textarea")) {
$('#status').html('fake paste');
// Focus the offscreen editable
$('#TribblePaste').focus();
// Opera doesn't support onPaste events so we have
// to use a timeout to get the paste
if ($.client.browser === "Opera")
{
setTimeout(function() {
doFakePaste = false;
var html = $('#TribblePaste').html();
var text = $('#TribblePaste').text();
if (text == '') text = $('#TribblePaste').val();
$('#resultA').text('[o] '+html);
$('#resultB').text('[o] '+text);
$('#TribblePaste').val('');
$('#TribblePaste').text('');
$('#TribblePaste').blur();
}, 1);
}
}
}
}).on('paste', function (e) {
// Firefox is not supported - they don't
// expose the real clipboard
if ($.client.browser === 'Firefox')
return;
$('#status').html('paste event');
// real pasteing
var html = '';
var text = '';
if (window.clipboardData) // IE
{
text = window.clipboardData.getData("Text");
}
if (e.clipboardData && e.clipboardData.getData) // Standard
{
text = e.clipboardData.getData('text/plain');
text = e.clipboardData.getData('text/html');
}
if (e.originalEvent.clipboardData &&
e.originalEvent.clipboardData.getData) // jQuery
{
text = e.originalEvent.clipboardData.getData('text/plain');
html = e.originalEvent.clipboardData.getData('text/html');
}
$('#resultA').text(html);
$('#resultB').text(text);
});
// Setup the offscreen paste capture area
$('<textarea contenteditable id="TribblePaste"></textarea>').css({
'position': 'absolute',
'top': '-100000px',
'width': '100px',
'height': '100px'
}).on('paste', function(e) {
setTimeout(function() {
doFakePaste = false;
var html = $('#TribblePaste').html();
var text = $('#TribblePaste').text();
if (text == '') text = $('#TribblePaste').val();
$('#resultA').text(html);
$('#resultB').text(text);
$('#TribblePaste').val('');
$('#TribblePaste').text('');
$('#TribblePaste').blur();
}, 1);
}).appendTo('body');
$('#data').html('os: ' + $.client.os + ' browser: ' + $.client.browser);
});