2009-07-28 2 views
0

나는 이런 식으로 만들어 ValueBox라는 개체가 있습니다jQuery를 발() 메소드

function ValueBox(params) { 
    ... 
    $.extend(true, this, $('/* some HTML elements */')); 
    ... 
    var $inputBox = $('input[type=text]', this); 
    ... 
    this.val = function(newValue) { 
     if(typeof newValue == "number") { 
     $inputBox.val(newValue); 
     $inputBox.change(); 
     } else { 
     return parseFloat($inputBox.val()); 
     } 
    } 
} 

내가 때마다 $inputBox 변화를 발생시키는 특정 ValueBox 인스턴스에 변경 이벤트가 있지만를 변경 콜백 함수는 내 클래스에서 val() 메서드를 사용할 수 없습니다. 난 $(this).val()을 사용하여 jQuery val() 메서드를 호출한다고 가정합니다. 물론이 메서드는 작동하지 않습니다. 내가 정의한 val() 메서드에 액세스 할 수 있습니까?

+0

"는 사용할 수 없습니다"의미 "기본"jQuery를 방법을 확장 정확히 (해명). 접근 할 수 없습니까? 방화범에서 val 메서드를 호출 해 보셨습니까? 분명 나에게 공개적으로 보인다. – geowa4

+0

필자의 저의 강조점은 변경 처리기에서 "this"라는 키워드는 내가 만든 개체가 아니라 요소 자체를 참조한다는 것입니다. $ (this)와 같이 랩핑하면, 단순히 jQuery 객체 대신에 일반적인 jQuery 객체를 사용한다. – DLH

+0

오! 오케이, 나는 그 문제를 해결할 방법을 알고 있다고 생각한다. – geowa4

답변

1

$inputBox.change()으로 전화 할 때는 ValueBox 개체를 전달하십시오. 그런 다음 val으로 전화하십시오. 그렇게하면 jQuery 컨트롤에서 범위 지정 문제에 대해 걱정할 필요가 없습니다.

+0

그래, 나는 그것을 정말로 좋아하지 않는다. 그러나 나는 그것이 유일한 길이다라고 생각한다. 당신의 도움을 주셔서 감사합니다. – DLH

+0

예, jQuery는 자체 범위로 함수를 적용하고 jQuery의 내부 코드를 손상시키지 않으면 서이를 변경하는 방법이 필요합니다. 따라서 객체를 전달해야합니다. – geowa4

-1

난 당신이 공용 메소드를 정의 프로토 타입에서 그

function ValueBox(params) { 
    ... 
    $.extend(true, this, $('/* some HTML elements */')); 
    ... 
    this.inputBox = $('input[type=text]', this); 
    ... 
} 

ValueBox.prototype.val = function(newValue) { 
    if(typeof newValue == "number") { 
     this.inputBox.val(newValue); 
     this.inputBox.change(); 
    } else { 
     return parseFloat(this.inputBox.val()); 
    } 
}; 

// then this should work 
var test = new ValueBox(); 
test.val(123); 

같은 것을 시도해야한다고 생각, 모두가 ValueBox 기능이 비공개입니다; 당신이 당신의 플러그인 발을() 확장에 정말 관심이 있다면

+1

'this.val = function ...'은 확실히 개인적인 것이 아닙니다. – geowa4

+0

이'function val() {...}'이면 private 함수 였을 것입니다. – geowa4

0

, 당신은 다음과 같이 뭔가를 시도 할 수 있습니다 :

우리가 사용자가 설정 및 속성 "값"플러그인의 가장 바깥 쪽 요소했다고 가정합시다.

jQuery.fn.extend({ val: function(newValue) { 
    if (newValue == null) { 
     return $(this).attr("value"); 
    } else { 
     $(this).attr("value", newValue);   
    } 
} 
}); 

내 플러그인 인스턴스의 ID가 myValueBox 인 경우, 나는 다음과 같은 방식으로 발을 사용할 수있을 것입니다 :.

$ ("#의 myValueBox") 발() 그것은 일

나를 위해 나는 당신의 요구 사항을 충족하는지 모르겠습니다. 에

3
$.fn.yourpluginscope.originalVal = $.fn.val; 
$.fn.extend({ 
    val: function (value) { 
     if (/* detect your plugin element */) 
     { 
      if (value == undefined) 
       return /* getter */; 
      return $.fn.yourpluginscope.originalVal.call(/* setter */, value); 
     } 
     return $.fn.yourpluginscope.originalVal.call(this, value); 
    } 
}); 

적절한 방법은

관련 문제