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

Extend jQuery's .val() method to non-input elements

本文关键字:扩展到 输入 元素 方法 jQuery val      更新时间:2023-09-26

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

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

谢谢!

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

让它工作的唯一方法是扩展 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/