jQueryのlive()関数に関する質問があります。jQuery live() - 機能の損失 - クリックなしのライブ():enter key?
私はフォーラムをプログラミングしています。すぐに誰かのポスト何かとヒットを入力すると、jQueryのは、他の記事を追加し、また、コメントのテキストエリアを挿入し、次のイベントハンドラが適用される:
//Comment on a post
$('.commenttext').keyup(function(e) {
if (((e.keyCode || e.which) == 13) && !event.shiftKey) {
comment($(this));
}
});
コメントを投稿する機能は、その後、呼び出された - もで少なくともそれはすべきです。古い投稿の場合はうまく動作しますが、投稿されて追加されたものではありません。
私は、live()関数を使用して機能を保持することが可能であることを知っています。しかし、あなたが見ることができるように、投稿がenterを打つと提出され、ボタンは含まれていません。だから私はこれらのものをどのように組み合わせるのだろうか。つまり、live()を使うが、クリックしない。
//Function to post
function post()
{
//Get posttext and preserve line breaks
var posttext=$('#posttext').val();
//Ajax if posttext is not empty
if(posttext!="")
{
$.ajax({
//blablabla
success: function(postid){
//Prepend posts with the new post
var newpost=posttext+'<br/><textarea id="commenttext'+postid+'" class="commenttext" placeholder=" Comment..."></textarea>';
$(newpost).hide().prependTo('#postsDiv').fadeIn('slow');
}
});
}
}
UPDATE 1:FYI
は、何かを投稿する機能は、このようになります私は罰金これに何か、記事を投稿するイベントハンドラを変更した、まだ機能がありますではないが:
//Post something
$('#postDiv').on('keyup', '#posttext', function(e) {
if ((e.which == 13) && !event.shiftKey) {
post($(this));
}
});
はUPDATE 2:
それはのために働きます今:)私はcomment()とpost()の両方が生きていなければならないことは知らなかった。 は、私が今、次の2つの関数があります。
//Post something
$('#postDiv').on('keyup', '#posttext', function(e) {
if ((e.which == 13) && !event.shiftKey) {
post($(this));
}
});
と
//Comment on a post
$('.commenttext').live('keyup', function(e) {
if (e.which == 13 && !event.shiftKey) {
comment($(this));
}
});
をそれが正常に動作しますが、また、コメントを()で使用する方がよいでしょう。私はこれを試しました:
$('.commentsDiv').on('keyup', '.commenttext', function(e) {
if ((e.which == 13) && !event.shiftKey) {
post($(this));
}
});
しかし、それは動作しません - どのように? commentsDivはcommenttextの親要素であり、コメントテキストエリアです。私はIDでそれに対処する必要がありますか?
FYIでは、jQueryはすでにイベントオブジェクトを正規化しているので、 '(e.keyCode || e.which) 'は必要ありません。ちょうど 'e.which'を使用してください。 More at http://api.jquery.com/category/events/event-object/ – Esailija
'$(document).on( 'keyup'、 '.commenttext'、function(e){' –
@Rocket – weltschmerz