2011-07-13 6 views
2

同じループアクションを実行するにはどうすればいいですか?ありがとうございました。javascript repeat action

$('a.level').click(function() { 
var level = $(this).parent('li').attr("class"); 
var nxvl = parseInt(level)+1; 
var dir  = $(this).html(); 

var curr = $(this); 

var data = new Object(); 
    data.n  = new Date().getTime(); 
    data.act = "getdirectory"; 
    data.level = level; 
    data.direct = dir; 

var str = $.toJSON(data); 
$.post('ajax.php', { str: str }, function(result){ 
    var data = eval('('+obj.data+')'); 
    var html = []; 
    $.each(data, function(key, value) { 
     html[key] = "<li class='"+nxvl+"'><a href='javascript:void(0);' title='' class='level'>"+eval(value)+"</a><ul></ul></li>"; 
    }); 

    $(curr).next('ul').html(html.join("")); 
    $('a.level').click(function() { 

     // do the same action 
    } 

}); 
return(false); 

});

答えて

3

この場合、ライブハンドラを使用することをお勧めします。アウト機能のロジックを移動してみてください、あなたが$(curr).next('ul').html(...)

+0

ありがとうございました。 – njai

+0

これは、新しく作成された要素が元のセレクタと正確に一致する場合にのみ機能します。元の質問にはうまくいくが、覚えておくとよい。 – beeglebug

0

でHTMLを更新した後、あなたは新しいクリックハンドラを追加することを心配しないでください

$('a.level').live('click', function() { 
    ... 
} 

$('a.level').click(function() { 
    ... 
} 

へ:あなたの外側には、変更します匿名関数の名前付き関数に変換します。 、関数内で再度関数を呼び出すことができ、あるいは、あなたの場合には、別の要素にあなたをそれを添付方法

function myFunc() { /* logic */ } 
$('element').click(myFunc); 

を:

ので、代わりの:

$('element').click(function(){ /* logic */ }); 

あなたが持っているでしょう今作成したばかりです。