2012-05-15 3 views
2

제목이 읽을 때 show() & hide()를 다른 함수의 매개 변수로 전달하고 싶습니다.요소에 적용 할 매개 변수로 jQuery.show() 및 jQuery.hide()를 전달합니다.

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

나는 테이블을 가지고 있고 그 <tr> 각 각에서 그들과 다른 status 속성이 조금이의 목적을 설명하기 위해 : 나는 호출 할 때 다음

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

applyActionOnClass 기능입니다 다른. 테이블 상단에 두 개의 체크 박스가 있는데, 각각 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

나는 어쨌든 다른 해결책을 upvoted. 이것은 다른 접근법을 보여주고 내 뇌가 더 일하게하는 단지 방법이었습니다 :) – fcalderan

+0

작은 jQuery 상호 감사 사회가 여기서 진행됩니다. ;) –