2009-11-05 9 views
1

ColorBox의 checbox를 확인하는 사용자가 설정 한 값을 유지할 JavaScript 객체를 만들었습니다.사용자 액션에서 값을 가져 오기위한 JavaScript 메커니즘

jQuery 및 프로그래밍 JavaScript "올바른 방법"에 비교적 익숙하며 사용자를 캡처하기위한 아래의 메커니즘 확인 작업이 일반적으로 JavaScript의 모범 사례였습니다. 또한 jQuery를 사용하고 있기 때문에 활용해야하는 작업을 수행하는 더 간단한 방법이 있습니까?

function Check() { 
    this.Checked = false; 
} 

obj = new Check; 

$(document).ready(function() { 
    $('.cboxelement').colorbox({ html: '<input id="inactivate" type="checkbox" name="inactivatemachine">&nbsp;<label for="inactivate">Inactivate Machine</label>' }); 

    $(document).bind('cbox_cleanup', function() { 
     obj.Checked = $.fn.colorbox.getContent().children('#inactivate').is(':checked'); 
    }); 

    $(document).bind('cbox_closed', function() { 
     if ($($.fn.colorbox.element()).attr('id').match('Remove') && obj.Checked) { 
      var row = $($.fn.colorbox.element()).parents('tr'); 
      row.fadeOut(1000, function() { 
       row.remove(); 
      }); 
     } 
    }); 
}); 

답변

2

개인적으로는 직접 사용하여 객체에 값 (들)을 첨부 할 jQuery의 내장에서 data() 방법. 나는 당신이 무엇을하려고하는지 완전히 모르겠지만, 예를 들어 나중에 DOM을 사용하기 위해 DOM의 "네임 스페이스"에 값을 첨부 할 수 있습니다.

$('body').data('colorbox.checked',true); 

그런 다음 나중에하여 값을 검색합니다 :

var isChecked = $('body').data('colorbox.checked'); 

당신은 어떤 JQuery와 개체에 data() 방법을 실행합니다. 나는 이것이 jQuery가가는 한 최선의 방법이라고 말하고 싶습니다.

+0

jQuery의'data()'메소드에 대해 알지 못했습니다. ColorBox의 특성을 감안할 때 내 용도에 가장 적합합니다. "네임 스페이스"에 값을 첨부 할 때 지침이 있습니까? – ahsteele

+0

@ahsteele : 글쎄, "네임 스페이스"는 실제로 문자열 기반입니다 (그러므로 내 대답의 단어 주위의 따옴표). 기본적으로 키 -> 값 쌍을 객체에 추가합니다. 뭔가 (데모 용) :'document.body.data [ 'colorbox.checked'] = true'.이것은 다른 플러그인이 우연히 key-> value 쌍을 덮어 쓰지 않도록하기 위해서입니다 (이것은 'checked'와 같은 일반적인 변수로 가능합니다). 합법적으로 다음과 같이 할 수 있습니다 :'$ ('body'). data ('colorbox_checked', true)'. 점 표기법 대신. 내가 말했듯이 "네임 스페이스"입니다. 행운을 빕니다! – KyleFarris

0
  • $($.fn.colorbox.element()) 중복입니다. $.fn.colorbox.element()은 이미 jquery 요소입니다.

  • jquery 요소를 참조하는 변수 앞에 $을 추가하는 것이 일반적으로 사용됩니다 (적어도 본 예제에서는 보입니다).
    그래서 var $rows = $.fn.colorbox.element().parents('tr');은 jquery 요소를 참조하고 있다는 아이디어를 즉각적으로 제공합니다.

  • 두렵지 만 fadeOut은 IE6의 행 (i가 정확하게 호출 한 경우)에서 작동하지 않습니다. 제거하기 전에 <tr> 안에있는 모든 콘텐츠를 숨길 수 있어야합니다.

colorbox의 용도가 가장 잘 모르기 때문에 "단순화"하는 데 도움이되지 않습니다.

+0

불행히도 $ .fn.colorbox.element()는 jQuery 요소를 반환하지 않지만 다음 릴리스에서 사용됩니다. IE6에서 페이드 아웃 (fadeout)에 대해 알아볼 것입니다. 내 가장 큰 관심사는 사용자의 작업을 캡처하기 위해 내 사용자 지정 Check() 개체를 사용하는 것입니다. – ahsteele

+0

기술적으로 "$$"앞에 " –

+0

"이 표시됩니다. 수정되었습니다. –

1

클로저에서 참조를 캡처하면 전역 데이터가 필요하지 않으므로 여러 개의 검사를 쉽게 수행 할 수 있습니다. 그러나이 경우에는 단일 colorbox에 바인딩되어있는 것처럼 보이므로 여러 인스턴스를 유용하게 사용할 수 있는지 여부는 알 수 없습니다.

function Check() { 
    this.Checked = false; 

    var obj = this; // 'this' doesn't get preserved in closures 

    $(document).ready(function() { 
     ... as before 
    )}; 
} 

var check = new Check; // Still need to store a reference somewhere. 
+0

ColorBox가 동적으로 내용을 렌더링하므로 한 페이지에만 표시됩니다. 나는 클로저에 대해 더 많이 읽을 필요가있다. 그러나 이것은 글로벌 변수가 돌아 다니는 것보다 훨씬 더 깨끗해 보인다. – ahsteele