我正在编写一个自定义jquery插件,它基本上复制了输入的功能。我可以解释为什么,但说实话这个解释很长,我认为这与这个问题无关。
当我尝试将jQuery的.val()方法扩展到我的自定义jquery插件时遇到了麻烦。这是我尝试过的:
$.fn.custom_text_input = function(options){
return this.each(function(){
var custom_text_input = new CustomTextInput(options, this)
$(this)[0].val = function(){
alert('something useful')
}
})
}
我尝试过其他一些变种,但都无济于事。如果有人有任何可行的想法,我会非常欣赏这种智慧!
谢谢!
答案 0 :(得分:4)
要覆盖$.val()
方法,您需要执行$.fn.val = function () {...}
之类的操作。这是一个演示:http://jsfiddle.net/CRRP5。我建议在变量中保存旧的.val()
方法,以便在常规表单输入上调用.val()
时可以使用它。
答案 1 :(得分:2)
你要实现这一目标的唯一方法是扩展jQuery的val()
方法的结果。
$(function(){
$.fn.oldVal = $.fn.val
$.fn.val = function(value){
//I'm assuming here that you're setting/getting a data value
//on the object to keep track of it's "custom value"
if(value && $(this).data('custom-input-value')){
return $(this).data('custom-input-value', value);
}
else if(value = $(this).data('custom-input-value')){
return value;
}else{
return value ? $(this).oldVal(value) : $(this).oldVal();
}
}
})
这可能适合你:p
这是一个有效的jsfiddle:http://jsfiddle.net/Z4c6d/