2

私はjQueryを初めて使用します。WordPressプラグインの1つに使用しています。次のコードがあります

<script type="text/javascript">
  $(document).ready(function(){
    $("#tmp-preview").html($("#title").val());
    $("#title").change(function(){
      $("#tmp-preview").html(getTweetPreview);
    });
  });
</script>

wordpressの新規投稿ページのタイトルテキストフィールドのテキストが変更されるたびに、divに反映する必要があります。しかし問題は、そのイベントが最初の変更でトリガーされないことです。つまり、ユーザーが初めてタイトルを書き、フォーカスを他の部分に移動すると、そのタイトルは div で更新されません。しかし、彼がタイトルを変更すると、新しいタイトルが反映されます。なぜこのようなことが起こるのですか?

そして、私が知りたいもう1つのことは、テキストフィールドのフォーカスが失われていない場合でも、各文字の変更時にタイトルテキストがdivで更新されるようにしたい場合、キーダウンイベントを使用する必要があるか、または変更でそれを行うことができるかということです何とかイベント?

PS: 問題は getTweetPreview() 関数ではありません。私はすでに単純な文字列を使用してみましたが、それでも同じです。タイトルの編集が終了すると、下書きが自動保存されるため、これはワードプレスの他の関数呼び出しが原因で発生していると思います。これが問題になる可能性はありますか?もしそうなら、それを解決する方法は?

4

7 に答える 7

3

これはうまくいくかもしれません:

$("#title")
    .on(
        "input", 
        function () {
            $("#tmp-preview").html(getTweetPreview); 
        }
    );

他のすべてが失敗した場合は、次のようなことを試してください。

var updateTweetPreview = function () { // DRY
    $("#tmp-preview").html(getTweetPreview); 
};

$("#title")
    .one( // sic.
        "keydown", 
        function () {
            updateTweetPreview();
            $("#title").on("change", updateTweetPreview);
        }
    );
于 2012-07-23T05:35:39.363 に答える
2

on()イベントなどにぜひご利用ください。live()jQuery 1.7 sourceで非推奨になりました。

実際の問題としては、WordPress の自動保存は、自動保存が完了したときにデータのコピーをフォームにロードするために ajax を使用していると思います。これにより、コードの内容が上書きされます。これを入れてみてください:

<script type="text/javascript">
  $(document).ready(function(){
    $("#tmp-preview").html($("#title").val());
    $("#title").on("change", function(event){
        event.stopImmediatePropagation()
        $("#tmp-preview").html(getTweetPreview());
    });
  });
</script>
于 2012-07-20T19:03:56.847 に答える
1

ライブメソッドを使ってみる

$("#title").live('change', function(){
  $("#tmp-preview").html(getTweetPreview);
});

ライブの詳細はこちら

于 2012-06-27T05:10:07.137 に答える
0

gettweetpreview はどこから来たのですか? これは毎回うまくいくようです:

$("#tmp-preview").html($("#title").val());
$("#title").change(function(){
  $("#tmp-preview").html($(this).val());
});

作業フィドル: http://jsfiddle.net/TNrPZ/

于 2012-06-27T05:17:09.143 に答える
0

keyupからのイベントを使用しjQueryて、テキスト ボックスからフォーカスを失うことなく、div のコンテンツを更新できます。

このコードを試してください

$("#tmp-preview").html($("#title").val()); $("#title").keyup(function(){ $("#tmp-preview").html($(this).val()); });

于 2012-07-20T13:17:03.190 に答える
0

私はこれが起こるのを見てきました、そしてそれを修正したのは要素を呼び出すことでした. イベントが発生する前に最後に行われたことを呼び出しfocus()みてください。focus()

于 2013-04-10T13:04:02.627 に答える
0

が関数の場合getTweetPreviewは、単に参照するのではなく、呼び出す必要があります。コードは次のようになります。

$("#title").live('change', function(){
  $("#tmp-preview").html(getTweetPreview());
});

ここでの唯一の違いは、()afterが含まれていることですgetTweetPreview

于 2012-07-18T09:58:49.477 に答える