13

私にはそれを解決する手がかりがないので、私にとって本当の取引の問題。

私が書いたjQueryスクリプトは、「貼り付け」アクションの入力値を取得し、それをajaxによってcodeigniterコントローラーに渡す必要があります。

実際には正常に機能しますが、2回目(およびそれ以降)の値を貼り付けた場合に限ります。いくつかの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 );
     }

});

});

どんな助けでもいただければ幸いです

編集:もう1つのヒント。

この特定のスクリプトの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に値を追加する必要があります。最初の貼り付けアクションではありません。第二に、それは実際に機能します。

EDIT3:私の友人は私にヒントをくれました。on( "paste")は、 "paste"アクションで、実際に貼り付けが行われる前に機能します。誰かが私に、貼り付け後に値を取得するためのタイムアウトを作成する方法のヒントを教えてくれたら、次に進むことができます。

4

4 に答える 4

23

問題が解決しました。

前に言ったように、「on( "paste")」アクションは実際のペーストに対して実行されています。したがって、値が入力に貼り付けられる前に関数が実行されます。これは、最初にグラブを貼り付けて、入力のデフォルト値(私の例では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のサポートに感謝します。

于 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 に答える