2012-01-28 76 views
10

对我而言真实交易问题,因为我无法解决它。第一次使用jQuery(“粘贴”)不会获取或传递值

jQuery脚本我写了应该抓住的“粘贴”操作的输入值,并通过AJAX传递到笨控制器。

它实际上工作正常,但只有当我贴的第二个(进一步)时间的价值。当我更改(“粘贴”)到某个div或其他DOM元素的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: OK,我敢肯定这是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。它不适用于第一次粘贴操作。第二它实际上是工作。

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

回答

21

问题解决了。 “对(”粘贴“)”动作

就像我之前所说的,正在做正确的实际粘贴。所以在将值粘贴到输入之前,函数正在完成。这是因为第一次粘贴抓取并传递输入的默认值(在我的示例中为null)。

解决方法是设置超时。正确的代码看起来像那样并且工作得很好。

$("#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); 

});

问题解决了,谢谢@ 3nigma支持。

+1

我希望一小时前看过这篇文章。 jquery可以让我浪费生命中的那个小时^^ – azzy81 2013-01-17 12:18:29

+1

你应该可以在timeout设置为0的情况下做到这一点。 – 2015-03-02 19:31:58

1

它工作得很好这里

DEMO

更新:

你将不得不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: " ); 
     }   
     }); 
     }); 

这里是一个DEMO我已经包括json2.js FR OM的cdn

+0

我得到了更深,并增加了对象POSTDATA现在看起来是这样的: VAR POSTDATA = { '网址':$( “#链接”)VAL(), '测试': 'TESTTEST' } ; 在第一次粘贴时,只有'测试'传递给控制器​​,[url]为空。 不知道有什么问题。 – sznowicki 2012-01-28 19:12:22

+0

@sznowicki查看答案更新 – Rafay 2012-01-28 19:42:29

+0

我为什么要这样做?如果我将(“粘贴”)更改为开启(“点击”),则每次都可以正常工作。它以正确的方式将输入值传递给控制器​​。 纠正我,如果我错了。 – sznowicki 2012-01-28 19:53:20

1

我最终使用'oninput',它工作正常,除非您需要支持IE8或更低版本。

+0

它为我工作谢谢@Roger – 2016-12-16 06:27:23