Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Opera中的onpaste解决方案<;=11.11_Javascript_Jquery_Onpaste - Fatal编程技术网

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);
});