2011-07-13 41 views
2

如何做同樣的循環操作?謝謝。javascript重複動作

$('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

在這種情況下,您可能希望使用活動處理程序。更改外:

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

要:

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

那你不擔心增加新的單擊處理您在$(curr).next('ul').html(...)

+0

謝謝你這麼爛。 – njai

+0

這隻有在新創建的元素與原始選擇器完全匹配時纔有效。它將適用於原始問題,但要記住它很好。 – beeglebug

0

更新HTML後試用移動功能邏輯的匿名函數和一個命名的函數。

所以不是:

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

你必須:

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

這樣一來,在函數中,你可以再次調用該函數,或者在你的情況下,將其連接到另一個元素你剛剛創建。