Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.05.2013, 13:11
Новичок на форуме
Отправить личное сообщение для challenger Посмотреть профиль Найти все сообщения от challenger
 
Регистрация: 08.10.2012
Сообщений: 4

перегрузка функций jquery
добрый день!
не подскажете возможно ли сделать следующее ?

есть <input id="test1" value="val1">
$('#test1').val() возвращает "val1" .

возможно ли сделать следующее?
"перегрузить" метод val() для объекта $('#test1').

чтобы $('#test1').val() возвращал другое значение. но при этом атрибут value был равен "val1".


$('#test1').val = function(){
return "val2" ;
}
пробовал так, но к сожалению, не сработало.
console.log($('#test1').val()) ; /// логирует val1, т.е. текущее значение.
что я делаю не так? и вообще возможно ли это?


заранее спасибо.
Ответить с цитированием
  #2 (permalink)  
Старый 06.05.2013, 13:39
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Выполняя $('#test1'), вы каждый раз создаете новый экземпляр объекта jQuery. Если упростить код библиотеки, то происходит примерно следующее:
function jQuery(arg) {
	var list = document.querySelectorAll(arg), i = list.length;
	while (i--) {
		this[i] = list[i];
	}
}

function $(arg) {
	return new jQuery(arg);
}

чтобы изменить метод val для всех объектов jQuery, необходимо внести изменения в прототип:
jQuery.prorotype.val = function () {
	return "val2";
};

чтобы изменить метод val конкретного экземпляра jQuery, необходимо сохранить на него ссылку, и работать с ним по этой ссылке:
var $test = $('#test1');
$test.val = function () {
	return "val2";
};
alert($test.val());
Ответить с цитированием
  #3 (permalink)  
Старый 06.05.2013, 14:21
Новичок на форуме
Отправить личное сообщение для challenger Посмотреть профиль Найти все сообщения от challenger
 
Регистрация: 08.10.2012
Сообщений: 4

огромное спасибо за разъяснения.
всё работает.
Ответить с цитированием
  #4 (permalink)  
Старый 07.05.2013, 18:33
Особый гость
Посмотреть профиль Найти все сообщения от monolithed
 
Регистрация: 02.04.2010
Сообщений: 4,260

Сообщение от Octane
чтобы изменить метод val для всех объектов jQuery, необходимо внести изменения в прототип:
jQuery.prorotype.val = function () {
    return "val2";
};
jQuery.prototype.val

challenger,
В следующий раз создавайте тему в соответсвующем разделе!

Последний раз редактировалось monolithed, 07.05.2013 в 18:36.
Ответить с цитированием
  #5 (permalink)  
Старый 07.05.2013, 18:44
Аватар для animhotep
Профессор
Отправить личное сообщение для animhotep Посмотреть профиль Найти все сообщения от animhotep
 
Регистрация: 17.01.2013
Сообщений: 887

да, и jQuery.prototype.val === $.fn.val
write less, do more))
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
хочу инвайт на хабр macdack Оффтопик 45 28.07.2013 23:18
Последовательность функций как в jquery platedz Events/DOM/Window 54 09.01.2013 05:07
Вопрос поддержки старых методов jQuery antonM jQuery 1 04.10.2012 00:08
Ребята помогите правильно реализовать цепочки функций как в jquery mrgordon Общие вопросы Javascript 6 04.06.2012 20:40
Перекрытие функций jQuery archi_sova jQuery 0 23.05.2012 18:05