JQuery UI 1.8.23 复制粘贴问题

标签 jquery jquery-autocomplete

我们使用以下 JQuery 代码 (JSF) 来调用自动完成。当用户键入数据时,一切似乎都工作正常,但当用户复制并粘贴时,自动完成功能将仅在第二次尝试中工作。我正在 IE 8 中测试以下代码。欢迎任何输入

<script type="text/javascript">
$(function () { 
    $(document).on('keyup.autocomplete','##{resp.workItemResponse.wiResponseId}', function() {
        $('##{resp.workItemResponse.wiResponseId}').autocomplete({
            minLength: 3,
            source: function( request, response){
                $.ajax({
                    type: 'GET',
                    url: "/iaportal/autoCompleteServlet",
                    cache: false,
                    delay: 200,
                    data: {
                        'respId':'#{resp.workItemResponse.wiResponseId}',
                        'type': '#{autoCompleteType}',
                        'term':request.term
                    },
                    contentType: "application/json; charset=utf-8",
                    dataType: "json",
                    success: function(data){
                        response($.map(data.acctNum, function (item) {
                            return {                                
                                label: item.label,
                                value: item.label
                            }
                        }));
                    },
                    error: function(message){
                        alert("error "+message);
                    }
                });
            },
            select: function( event, ui ) {
                var selectedObj = ui.item;
                var text = selectedObj.value;
                $('.autoComplete#{resp.workItemResponse.wiResponseId}').attr('value', text);
                $('.autoComplete#{resp.workItemResponse.wiResponseId}').trigger('change'); 
            }
        });
        $('##{resp.workItemResponse.wiResponseId}').keyup(function(){
            var text = this.value;
            if(text == '' || text.length == 0){
                $('.autoComplete#{resp.workItemResponse.wiResponseId}').attr('value', "");
                $('.autoComplete#{resp.workItemResponse.wiResponseId}').trigger('change');
            }
        });
    }); // on Ends

    var textElem;
    $(document).on('paste','##{resp.workItemResponse.wiResponseId}',function() {
        textElem = this;
        setTimeout(invokeOnPaste , 100); 
    });  

    function invokeOnPaste(){
        var text = $(textElem).val();
        if(text.length == 14){ 
            $('.autoComplete#{resp.workItemResponse.wiResponseId}').attr('value', text);
            $('.autoComplete#{resp.workItemResponse.wiResponseId}').trigger('change'); 
        } else if(text.length != 0){
            $('##{resp.workItemResponse.wiResponseId}').trigger('search','autocomplete');
        } 
    }
});
</script>

最佳答案

除了 IE(以及启用了配置选项的 FireFox)之外,所有浏览器的 Javascript 剪贴板访问均受到限制。您需要绑定(bind)到其他内容,例如 keyup 用于 Ctrl+V粘贴。据我所知,以跨浏览器兼容的方式绑定(bind)到上下文菜单粘贴是不可能的。

关于JQuery UI 1.8.23 复制粘贴问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14966564/

相关文章:

html - 循环 JSON 数据未按预期工作

c# - ASP.Net MVC Jquery UI 自动完成 - 列表在我调试时不显示

javascript - 带有特殊符号自动完成功能的自由文本输入

jQuery 自动完成 : if user writes down a match, 回调函数不会被调用

javascript - 从url中获取id值并解析为def

jquery - 将 .SVG 文件的内容插入到 HTML 元素中

javascript - 如何检查传递给 JavaScript 函数的值是否已定义或其长度是否 >=0?

jquery - 使用 jQuery 使用 Select 显示/隐藏多个 DIV

php - jQuery UI 自动完成显示 html 代码

jquery - 如何执行传递 id 而不是名称的 jQuery 自动完成?