7wp*_*7wp 28 jquery jquery-plugins
有没有办法轻松覆盖jQuery的val()功能?
我想要覆盖它的原因是我想在每次为元素设置值时添加一些处理.而且我不想制作另一个自定义值设置器,例如myVal().
CMS*_*CMS 48
您可以存储对原始val函数的引用,然后覆盖它并进行处理,稍后再调用它call,以使用正确的上下文:
(function ($) {
var originalVal = $.fn.val;
$.fn.val = function(value) {
if (typeof value != 'undefined') {
// setter invoked, do processing
}
return originalVal.call(this, value);
};
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
请注意,您可以通过检查参数是否存在来区分getter调用$(selector).val();和setter调用.$(selector).val('new value');valueundefined
小智 18
我知道这是一个古老的主题,但它首先在谷歌搜索,答案是不完全正确的...
例如,如果您在控制台中尝试,$('#myinput').val()则应获取#myinput的值.
但是如果你这样做,$('#myinput').val(undefined)你应该设置#myinput的值!(使用当前的答案和它的注释,你不会设置#myinput的值)
这是一个使用的升级答案arguments.
(function ($) {
var originalVal = $.fn.val;
$.fn.val = function(value) {
if (arguments.length >= 1) {
// setter invoked, do processing
return originalVal.call(this, value);
}
//getter invoked do processing
return originalVal.call(this);
};
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
如果你想传递所有参数,你也可以使用apply
(function ($) {
var originalVal = $.fn.val;
$.fn.val = function(value) {
if (arguments.length >= 1) {
// setter invoked, do processing
} else {
//getter invoked do processing
}
return originalVal.apply(this, arguments);
};
})(jQuery);
Run Code Online (Sandbox Code Playgroud)
我希望它有所帮助!
| 归档时间: |
|
| 查看次数: |
20334 次 |
| 最近记录: |