13

对我来说真正的交易问题,因为我不知道如何解决它。

我编写的 jQuery 脚本应该获取“粘贴”操作的输入值,并通过 ajax 将其传递给 codeigniter 控制器。

它实际上工作正常,但前提是我第二次(以及更长时间)粘贴该值。当我将某些 div 或其他 DOM 元素的 on("paste") 更改为 on("click") 时,它也可以正常工作。

脚本:

<script type="text/javascript">
$("#link").on("paste", function(){
$("#thumbs").empty().html("<p>loading</p>");
var postData = {
  'url' : $("#link").val()
 }; 

 $.ajax({
     type: "POST",
     url: "/thumb/ajax/",
     data: postData , //assign the var here 
     success: function(msg){
    $("#thumbs").html( "Data Saved: " + msg );
     }

});

});

任何帮助,将不胜感激

编辑:还有一个提示。

这个特定脚本中的 val() 实际上在粘贴操作之前取值。如果我在这个输入上写了一些东西,然后删除它并粘贴其他东西,它实际上会将我写的值传递给控制器​​,而不是我粘贴的值。

EDIT2:好的,我很确定这是粘贴的 jQuery 问题。

<script type="text/javascript">

    $("#link").on("paste", function(){
        $("#thumbs").empty().html("<p>loading</p>");
        var postData = {'url' : $("#link").val() }; 
        $("#thumbs").html($("#link").val());
    });


</script>

此脚本应将输入值添加到 div#thumbs。它不适用于第一次粘贴操作。其次,它确实有效。

EDIT3:我的朋友给了我一个提示。on("paste") 适用于“粘贴”动作,在粘贴实际完成之前。如果有人给我提示如何在粘贴后超时以获取值,我可以继续。

4

4 回答 4

23

Problem solved.

Like I said before, "on("paste")" action is being done right on the actual paste. So function is being done before the value is pasted to the input. That's because first time paste grabs and pass the default value of the input (null for my example).

Solution is to set the timeout. Right code looks like that and works just fine.

$("#link").on("paste", function(){

setTimeout(function() {
    $("#thumbs").html("<p>loading</p>");
    var postData = {
      'url' : $("#link").val()
      };
    $.ajax({
         type: "POST",
         url: "/thumb/ajax/",
         data: postData , //assign the var here 
         success: function(msg){
        $("#thumbs").html( "Data Saved: " + msg );
            $(".thumb").click(function(){
            (this).attr('id');


        });

         }

    });
}, 500);

});

Problem solved, thanks @3nigma for support.

于 2012-01-29T11:51:05.110 回答
3

我最终使用了“oninput”,除非您需要支持 IE8 或更低版本,否则它可以正常工作。

于 2015-04-22T20:16:54.240 回答
2

它在这里工作得很好

演示

更新:

您必须stringify将该对象发送到服务器,包括json2.js您的代码将如下所示

$("#link").on("paste", function(){
$("#thumbs").empty().html("<p>loading</p>");
var postData = {   'url' : $("#link").val(),   'test' : 'testtest'  };

     $.ajax({
         type: "POST",
         url: "your/url",
         data:JSON.stringify(postData),
         success: function(msg){
        $("#thumbs").html( "Data Saved: "  );
         }        
        });
      }); 

这是我从CDN中包含的演示json2.js

于 2012-01-28T14:18:07.890 回答
1

根据 sznowicki 找到的解决方案,它使用 setTimeOut 工作。

我的例子:

$("#search-product").on("paste", function(){
    let $element = $(this);
    setTimeout(function(){
        search($element)
    },0);
});

谢谢!

于 2019-06-24T19:33:40.740 回答