طريقة 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
على ذلك. بهذه الطريقة، لن تقلق بشأن مشاكل النحافة ضمن ضوابط مسج.
نصائح أخرى
$.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);
}
});
الطريقة المناسبة لتمديد طريقة مسج "الأصلية"
إذا كنت مهتما حقا بإنقدة Val () مقابل البرنامج المساعد الخاص بك، فيمكنك تجربة شيء مثل ما يلي:
دعونا نفترض أنك قمت بتعيين ونسب "القيمة" في العنصر الخارجي في البرنامج المساعد الخاص بك.
jQuery.fn.extend({ val: function(newValue) {
if (newValue == null) {
return $(this).attr("value");
} else {
$(this).attr("value", newValue);
}
}
});
إذا كان معرف مثيل المكون الإضافي الخاص بي هو MyValueBox، فسأكن قادرا على استخدام Val بالطريقة التالية:
$ ("# myvalueBox"). فال ()
لقد عملت من أجلي، لكنني لست متأكدا مما إذا كان يلبي الاحتياجات الخاصة بك.
أعتقد أنك يجب أن تجرب شيئا من هذا القبيل
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
وظيفة خاصة