Переопределить функцию jQuery .val ()?

Есть ли способ легко переопределить функцию val() jQuery?

Причина, по которой я хочу отменить это, заключается в том, что я хочу добавить некоторую обработку каждый раз, когда для элемента задано значение. И я не хочу создавать другой настраиваемый myVal() значений, например myVal() .

Вы можете сохранить ссылку на исходную функцию val , затем переопределить ее и выполнить свою обработку, а затем вызвать ее с помощью call , чтобы использовать правильный контекст:

 (function ($) { var originalVal = $.fn.val; $.fn.val = function(value) { if (typeof value != 'undefined') { // setter invoked, do processing } return originalVal.call(this, value); }; })(jQuery); 

Обратите внимание, что вы можете различать геттер-вызов $(selector).val(); и сеттерный вызов $(selector).val('new value'); просто проверяя, является ли аргумент value undefined или нет.

Я знаю, что это старый вопрос, но он первый в поиске Google, и ответ не совсем прав …

Например, если вы попробуете в консоли $('#myinput').val() вы должны получить значение #myinput.

Но если вы делаете $('#myinput').val(undefined) вы должны установить значение #myinput! (При текущем ответе и его комментариях вы не укажете значение #myinput)

Ниже приведен обновленный ответ, в котором используются arguments .

 (function ($) { var originalVal = $.fn.val; $.fn.val = function(value) { if (arguments.length >= 1) { // setter invoked, do processing return originalVal.call(this, value); } //getter invoked do processing return originalVal.call(this); }; })(jQuery); 

если вы хотите передать все аргументы, которые вы также можете использовать, примените

 (function ($) { var originalVal = $.fn.val; $.fn.val = function(value) { if (arguments.length >= 1) { // setter invoked, do processing } else { //getter invoked do processing } return originalVal.apply(this, arguments); }; })(jQuery); 

Надеюсь, это поможет!

Я знаю, что проблема старая, но просто для того, чтобы дать полное решение. Для того, чтобы как jQuery.val (), так и jQuery.val (значение) работать после переопределения, вам необходимо переопределить его правильно и отдельно. Потому что при вызове jQuery.val () тогда originalVal.call (это, значение); будет работать неправильно.

Чтобы сделать это правильно, вам нужно сделать что-то подобное при получении значения: originalVal.call (this);

Вот сайт, где все объясняется: http://extremedev.blogspot.com/2012/01/override-jqueryval-and-jqueryvalvalue.html

С уважением, Роман

Если я понимаю вас правильно, что-то подобное должно сделать трюк просто прекрасно:

 jQuery.fn.val = function (new_val) { alert("You set a val! How wonderful!"); this.value = new_val; }; 

Просто убедитесь, что вы включили регулярные функции: получение значений выборок и т. Д. Просто придерживайтесь этого кода после обычной библиотеки jQuery.

У меня есть что добавить в ответ CMS, моя реализация будет отличаться и будет выглядеть так:

 (function ($) { var fnVal = $.fn.val; $.fn.val = function(value) { if (typeof value == 'undefined') { return fnVal.call(this); } var result = fnVal.call(this, value); $.fn.change.call(this); // here you can add some more implementation return result; }; })(jQuery); 

наблюдайте $ .fn.change.call (это); будет вызываться перед выходом из функции val (”), это вызовет также .change () для каждого значения val (”).

  • Заполнитель HTML5 исчезает в фокусе
  • Разбирайте RSS с помощью jQuery
  • Зачем возвращать this.each (function ()) в плагинах jQuery?
  • Как запустить jQuery Fancybox при загрузке страницы?
  • Предварительный просмотр веб-страницы jQuery
  • Как прокручивать страницу вверх или вниз на якорь с помощью jQuery?
  • Как расширить модуль загрузки Bootstrap Twitter
  • Может ли jQuery добавлять запятые, когда пользователь вводит цифры?
  • jQuery: Как показать всплывающее изображение по щелчку эскиза?
  • jQuery datepicker - 2 ввода / текстовые поля и ограничивающий диапазон
  • Твиттер Bootstrap Collapse Direction-Horizontal вместо вертикальной
  • Давайте будем гением компьютера.