Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.07.2011, 19:12
Интересующийся
Отправить личное сообщение для Greck Посмотреть профиль Найти все сообщения от Greck
 
Регистрация: 27.07.2011
Сообщений: 27

Работа со свойства, при использовании fn.extend в jQuery
Тестовый пример.

index.html:
<!DOCTYPE html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Test</title>
</head>
<body>
  <p>
    <input id="gotype" type="checkbox"/>
    <label for="gotype">Read only</label>
    <br/>
    <input id="go" type="button" value="GO" />
  </p>
</body>
<script type="text/javascript" src="js/jquery-1.6.1.min.js"></script>
<script type="text/javascript" src="js/test.js"></script>
</html>


js/test.js:
(function($) {
$.fn.extend({  
  setVariable: function(){
    this.testVariable = true;
    alert('Set: '+this.testVariable);
  },
  
  getVariable: function(){
    alert('Get: '+this.testVariable);
  }
});

})(jQuery);

$(document).ready(function() {
  $('#go').click(function() {
    if ($('#gotype')[0].checked)    {
      $(this).getVariable();
    } else {
      $(this).setVariable();
    }
  });

});


Ссылка на пример: http://test.cms3.org/peretyaka/1/

В результате, при setVariable(), выводится "Set: true", а, если затем вызвать getVariable() - "Get: undefined". Если объявлять свойства, то результат тот же.

В общем-то вопрос один: почему?
И буду благодарен за ссылку на материал с описанием, а то в документации jQuery маловато данных.
Ответить с цитированием
  #2 (permalink)  
Старый 27.07.2011, 21:28
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Вы свойство экземпляру объекта jQuery добавляете
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.js"></script>
<script>
$.fn.extend({
	test: function () {
		alert(this.constructor == jQuery);
	}
});
$(document).test();
</script>
</body>
</html>
В этом объекте содержится ссылка на элемент #gotype, который может быть и не меняется, а вот сам этот объект-обертка может быть каждый раз новым
Цитата:
…
$(this).getVariable();
…
$(this).setVariable();
…
Тут происходит примерно следующее:
function jQuery(selector) {…}

jQuery.prototype = {
	find: …,
	child: …,
	next: …,
	wrap: …,
	…,
	getVariable: …,
	setVariable: …
};

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

хотя в jQuery это одной функцией сделано

Используйте метод data, чтобы хранить данные в DOM-элементах.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
выборка идентификатора при помощи jQuery из цикла PHP... xormax jQuery 4 27.04.2011 13:59
jQuery DatePicker: формат даты при передаче в get запросе viko_rus jQuery 0 16.02.2011 13:33
Сумасшедшая утечка памяти в Opera при использовании javascript в IFRAME Маэстро Opera, Safari и др. 12 18.11.2010 12:29
Как при чтении или записи свойства объекта вызывать функцию danik.js Общие вопросы Javascript 3 16.09.2010 17:57
jQuery UI datepicker -- не биндится при загрузке mkrylov jQuery 4 20.05.2009 20:36