4

スクリプトに ajax リクエストを送信し、json の結果を返す jquery が少しあります。次に、これらの結果が解析され、小さな画像ギャラリーが作成されます。これが私のフォームに追加されます。そのビットはすべて完全に機能します....私が抱えている問題は、画像をクリックするとさらに処理を実行できるように、画像にイベントをトリガーしようとしていることです....しかし、onclickを取得できません仕事...

誰かが何か指針を持っていれば、私はとても感謝しています。

  $('.imgSel').click(function()
{
    alert("I WORK!!!!");
});


$("#mydiv").change(function(){ 
{
var url = "ajax_pics.php";

$.ajax({
    type: "GET",
    url: url,
    error: function(data){
        console.log("could not get get pics");
    },
    success: function(data){
        console.log(data);
        var pics = jQuery.parseJSON( data );
    $("#imageResultsDiv").remove();
    var imageResults ='<label>Image</label><div id="currImg"></div>';


    imageResults += "<div style='clear:both'></div><ul>";
    imageResults += "<div id='imageResultsDiv'><ul>";
    for(var i in pics) 
    {
        imageResults +="<li>"; 
        imageResults +="<img class='imgSel' id='"+pics[i].filename+"' src='"+pics[i].image+"'  title='"+pics[i].summary+"'>"; 
        imageResults +="<br/><small>"+pics[i].title+"</small>"; 
        imageResults +="</li>";
    }
    imageResults +="</ul>";

    $('#picsplaceholder').before(imageResults);
    }
});

});

4

3 に答える 3

7

私があなたを正しく理解していれば、要素をDOMに動的に追加しています。

その場合、DOM に既に存在する要素にのみバインドするため、標準のクリック バインディングは使用できません。

jQuery 1.7 以降で推奨されているon()を使用してみてください。

$('#mydiv').on("click", ".imgSel", function()
{
    alert("I WORK!!!!");
});

最も近い静的要素を使用してバインドし、クリック イベントを適用するサブ要素を指定する必要があります。あなたの場合$('#mydiv')、最も近い静的要素だと思います。

古いバージョンの jQuery を使用している場合は、代わりにdelegate()を使用してください。さまざまなバインド方法と、それらがいつ追加され、誰がいつ置き換えたかについての詳細は、この投稿
を 参照してください。

于 2012-08-02T11:50:06.120 に答える
1

フランソワ・ワールは正しい。これがどのように機能するかというと、最も近い静的な「親」要素にイベント ハンドラーを追加します。そのため、その子要素のいずれかでクリック イベントがトリガーされると、その親要素まで伝達され、イベント ハンドラーがトリガーされます。

新しい要素を DOM に追加すると、jQuery によってそれらの要素にイベント ハンドラーを登録できなくなります。唯一のオプションは、イベント ハンドラーを親要素にアタッチし、イベントを親要素まで伝播させることです。したがって、DOM に新しい要素をいくつ追加しても、イベントは親要素でトリガーされます。

于 2012-08-02T11:59:54.147 に答える
-1

ライブ イベントを使用してみてください: http://api.jquery.com/live/

于 2012-08-02T11:49:30.763 に答える