カスタムオブジェクト上のjQueryのval()メソッド
-
19-09-2019 - |
質問
私は、このように作成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
機能であることすべてがプライベート、パブリックメソッドを定義します。
所属していません StackOverflow