0

新しいhtmlをDOMに挿入した後、それにリスナーを追加する必要があります。

ただし、新しい要素を一度に使用することはできません。

私のコード:

$('#loader').clone().removeAttr('id').load("Views/chatBox.html").appendTo('body');
$('#chat')
    .focus(function() {
        $(this).addClass('jV');
    })
    .blur(function() {
        $('#chat').removeClass('jV');
    });

これは機能していません。

live()の使用がまだ機能しない:

$('#chat').live('focus',function() {
    $('#chat').addClass('jV');
})
.live('blur',function() {
    $('#chat').removeClass('jV');
});
4

4 に答える 4

2

jQuery.live()代わりに使用してください。live()要素が作成されるときにイベントハンドラーをバインドします。jQuery1.3以降が必要です。

編集:チャットdivがまだロードされていないようですので、それでも問題があります。スキームを少し変更することをお勧めします。まず、ドキュメントには、すべてのチャットが行われる領域があります。

<div id="chat"></div>

そして、あなたは持っています:

$(function() {
  $("#chat div.chat").live("focus", function() {
    $(this).addClass("jV");
  }).live("blur", function() {
    $(this).removeClass("jV");
  });
});

ここでの違いは、チャットのクラスを持つdivをチャットエリア(チャットのIDを持つ)に追加することです。次に、単純に次のことを行います。

$('#loader').clone().removeAttr('id').load("Views/chatBox.html").appendTo('#chat');
于 2009-09-07T03:18:49.883 に答える
0

オンザフライで作成された新しいHTML/DOM要素の一部である要素にリスナーを追加する場合は、適切なjQueryイベントハンドラーを使用して作成するときに作成された要素にイベントをアタッチできます。

外部に読み込まれているコンテンツ(スクリプト/画像など)に問題がある場合は、それらの要素で.load()jQueryイベントハンドラーを使用して、それらがDOMで利用可能であり、操作できるかどうかを検出します。

別の投稿者が述べているように、.live()も機能しますが、要素の作成を自分で制御できる場合は必要ない場合があります。.live()は、やり過ぎになる可能性のあるオーバーヘッドを追加します。

于 2009-09-07T03:23:11.867 に答える
0

ロードしているchatBox.htmlに#chatがある場合は、ロードに含まれるコールバックを利用できます。

$('#loader').clone().removeAttr('id').load("Views/chatBox.html",function(){
    $('#chat').focus(function() {
        $(this).addClass('jV');
    })
    .blur(function() {
        $('#chat').removeClass('jV');
    });
}).appendTo('body');

http://docs.jquery.com/Ajax/load#urldatacallback

于 2009-09-07T03:49:51.633 に答える
0

Livequeryはあなたが望むことをします。そうなる

「ページが読み込まれ、DOMが更新された後でも、一致した要素のイベントをバインドするか、コールバックを自動的に起動します。」

于 2009-09-07T03:53:43.473 に答える