自定义对象上的 jQuery val() 方法
我有一个名为 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());
}
}
}
我在特定 ValueBox 实例上有一个更改事件,每当 $inputBox
更改时都会触发该事件,但更改回调函数无法使用 val()我班上的方法。 我假设通过使用 $(this).val()
我正在调用 jQuery val() 方法,这当然是行不通的。 是否可以访问我定义的 val() 方法?
I have an object called ValueBox that I created like this:
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());
}
}
}
I have a change event on a particular ValueBox instance which fires whenever the $inputBox
changes, but the change callback function is unable to use the val() method in my class. I assume that by using $(this).val()
that I'm calling the jQuery val() method, which of course wouldn't work. Is it possible to access the val() method that I defined?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
扩展“本地”jQuery 方法的正确方法
Proper way to extends "native" jQuery method
当您调用
$inputBox.change()
时,向其传递ValueBox
对象。 然后调用val
。 这样,您就不必担心 jQuery 控件内的范围问题。When you call
$inputBox.change()
, pass it theValueBox
object. Then callval
on that. That way, you won't have to worry about scoping problems within jQuery controls.如果您确实有兴趣为您的插件扩展 val() ,您可以尝试如下操作:
让我们假设您已在插件的最外层元素中设置并属性“value”。
如果我的插件实例的 id 是 myValueBox 那么我可以通过以下方式使用 val:
$("#myValueBox").val()
它对我有用,但我不确定它是否满足您的要求。
If you are really interested in extending val() for your plugin, you can try something like the following:
Let us assume that you have set and attribute "value" in the outermost element of your plugin.
If the id of my plugin instance is myValueBox then I would be able to use val in the following manner:
$("#myValueBox").val()
It worked for me but I am not sure if it meets your requirements.
我认为你应该尝试类似的方法,
在原型中定义公共方法,
ValueBox
函数中的所有内容都是私有的;I think you should try something like that
In prototype you define public methods, all that is in
ValueBox
function is private;