2013-02-19 102 views
2

我们使用以下JQuery代码(JSF)来调用Autocomplete。当用户键入数据时,Everthing似乎可以正常工作,但用户复制和粘贴Autocomplete时只能在第二次尝试中使用。我在IE 8测试下面的代码的任何输入赞赏JQuery UI 1.8.23复制粘贴问题

<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> 

回答

0

剪贴板访问是在Javascript中限制对于所有浏览器,除了IE浏览器(启用了配置选项和Firefox。)您需要绑定到别的东西,像keyupCtrl+V粘贴。就我所知,绑定到上下文菜单是不可能的。

+0

谢谢Serj Sagan。我可以使用JQuery插件修复复制和粘贴问题(CTRL + V和鼠标上下文粘贴):https://gist.github.com/mkelly12/424774。我们希望这可以在IE8中运行,并且可以使用这个插件。我认为这也适用于其他浏览器。 – JQueryJSF 2013-02-22 15:53:31

+0

是的,但它使用闪光灯在其他浏览器中完成 – 2013-02-22 17:13:00