jQueryのlive()関数について質問があります。
私はフォーラムをプログラミングしています。誰かが何かを投稿してEnterキーを押すとすぐに、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');
}
});
}
}
更新1:
これに何かを投稿するようにイベントハンドラーを変更しました。これは正常に投稿されますが、それでも機能はありません。
//Post something
$('#postDiv').on('keyup', '#posttext', function(e) {
if ((e.which == 13) && !event.shiftKey) {
post($(this));
}
});
更新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));
}
});
正常に動作しますが、コメントにはon()も使用することをお勧めします。私はこれを試しました:
$('.commentsDiv').on('keyup', '.commenttext', function(e) {
if ((e.which == 13) && !event.shiftKey) {
post($(this));
}
});
しかし、それは機能しません-どうしてですか?commentDivは、コメントテキストエリアであるcommenttextの親要素です。IDで対処する必要がありますか?
ありがとう :)