将jQuery .val()方法扩展为非输入元素

时间:2013-09-27 23:05:56

标签: javascript jquery

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

我尝试过其他一些变种,但都无济于事。如果有人有任何可行的想法,我会非常欣赏这种智慧!

谢谢!

2 个答案:

答案 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/