如何在为每个输入jquery计算.val()之前运行某些特定代码

Tus*_*rtz 6 html javascript jquery

有没有办法覆盖.val()输入的属性.

例如,在jQuery获取.val()调用值之前,运行一些代码,如剥离HTML标记.

Ion*_*zău 16

当然,但我不会真的推荐它,除非你真的想在页面上做一些疯狂的科学(比如添加一些自定义代理来干扰你无法控制的代码).相反,您可以通过将其附加到$.fn对象来创建自己的函数(请参见下文).

覆盖

尽管如此,如果你真的想要覆盖它,这里是如何:只需覆盖$.fn.val方法:

var $input = $("input")

// Before overriding
console.log($input.val())

// Override
//  1. Create a copy of the function
const oldValFn = $.fn.val
$.fn.val = function () {

  // 2. Run your custom code
  console.log("Called val");

  // 3. Call the native jQuery
  //    function and return the result
  return oldValFn.apply(this, arguments);
};


// After overriding
console.log($input.val())
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input value="42" />
Run Code Online (Sandbox Code Playgroud)

创建一个功能

您可以创建自定义(基本上是一个小插件),而不是覆盖:val

var $input = $("input")

$.fn.customVal = function () {

  var value = this.val();

  // Run your custom code
  //    e.g. append some data
  value = "The value is: " + value

  
  return value;
};

// Call it
console.log($input.customVal())
Run Code Online (Sandbox Code Playgroud)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input value="42" />
Run Code Online (Sandbox Code Playgroud)

  • @Tushortz这可能是更安全*替换所有`.VAL(`和`.stripTags(`*(在文件中),比代理所述`val`方法(在其他脚本中使用也一样). (2认同)