5

我正在编写一个自定义 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')
        }
    })
}

我已经尝试了其他一些变体,但都无济于事。如果有人有任何可行的想法,我将非常感谢您的智慧!

谢谢!

4

2 回答 2

4

要覆盖该$.val()方法,您需要执行类似$.fn.val = function () {...}. 这是一个演示:http: //jsfiddle.net/CRRP5。我建议将旧方法保存在变量中,以便在常规表单输入上调用.val()时可以使用它。.val()

于 2013-09-27T23:15:49.100 回答
2

你要让它工作的唯一方法是扩展 jQueryval()方法的结果。

$(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/

于 2013-09-27T23:25:56.743 回答