2012-05-15 44 views
2

正如標題所示,我想在另一個函數中將show()& hide()jQuery函數作爲參數傳遞。傳遞jQuery.show()&jQuery.hide()作爲要應用於元素的參數

function applyActionOnClass(attr, action) { 
    $('#salesonhold_table tr').each(function() { 
    if ($(this).attr('status') == attr) 
     $(this).action; 
    }); 
} 

下面是當我把我的applyActionOnClass功能:

$(document).on('change', '.checkboxes', function() { 
    var attr = $(this).val(); 
    if ($(this).is(':checked')) 
     applyActionOnClass(attr, show()); 
    else 
     applyActionOnClass(attr, hide()); 
}); 

要解釋一下這樣做的目的,我有一個表,它的每一個<tr>都有status屬性,它不同於它們各其他。我在表格頂部有兩個複選框,每個可能的值爲status,我想在複選框被觸發時隱藏/顯示相應的<tr>

觸發器和東西工作正常,但當涉及到$(this).action;它說hide is not defined。任何想法我在那裏做錯了什麼?

非常感謝!

回答

4

您可以改爲傳遞匿名函數(或委託)。該代碼處理的是:

function applyActionOnClass(attr, func) { 
    $('#salesonhold_table tr').each(function() { 
    if ($(this).attr('status') == attr) 
     func($(this)); 
    }); 
} 

該代碼將委託中:

$(document).on('change', '.checkboxes', function() { 
    var attr = $(this).val(); 
    if ($(this).is(':checked')) 
     applyActionOnClass(attr, function(e) { e.show(); }); 
    else 
     applyActionOnClass(attr, function(e) { e.hide(); }); 
}); 
+0

很好,謝謝! –

3

另一種解決方案是改變你的功能,像這樣

function applyActionOnClass(attr, action) { 
    $('#salesonhold_table tr').each(function() { 
    if ($(this).attr('status') == attr) 
     $(this)[action](); 
    }); 
} 

$(this)[action]();您可以在工作中看到它這裏作爲概念驗證http://jsfiddle.net/t6rEE/(並且我嘗試了hideshow

+0

+1:我也喜歡這個選擇! –

+1

反正我解決了其他解決方案。這只是一種展示不同方法的方式,並使我的大腦進一步發揮作用:) – fcalderan

+0

小小的jQuery相互欣賞社會在這裏進行。 ;) –

相關問題