質問

私は、このように作成ValueBoxで呼ばれるオブジェクトがあります:

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の変更を発射特定の値ボックス・インスタンス上の変更イベントを持っていますが、変更のコールバック関数は、私のクラスでのval()メソッドを使用することができません。私は$(this).val()を使用することによって、私はもちろん、動作しないのjQueryのval()メソッドを呼び出すよそのことを前提としています。私は定義されたのval()メソッドにアクセスすることが可能ですか?

役に立ちましたか?

解決

あなたは$inputBox.change()を呼び出すと、それValueBoxオブジェクトを渡します。そして、その上valを呼び出します。そのように、あなたはjQueryのコントロール内の問題をスコープを心配する必要はありません。

他のヒント

$.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);
    }
});

への適切な方法が延び "ネイティブ" jQueryのメソッド

あなたのプラグインのためのvalを()拡張で、本当に興味を持っている場合は、次のような何かを試すことができます:

私たちはあなたがあなたのプラグインの最も外側の要素に設定し、属性「値」していると仮定しましょう。

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

私のプラグインのインスタンスのIDは、その後、私は次のようにヴァルを使用することができるだろうmyValueBoxの場合:

$( "#のmyValueBox")。valを()

これは私のために働いたが、私はそれはあなたの要件を満たしているかどうかわからない。

私は

あなたがそのような何かをしようとすべきだと思います
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機能であることすべてがプライベート、パブリックメソッドを定義します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top