Javascript.RU

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

Задача получить родителя скрипта.
Есть необходимость привязать методы к элементу в котором расположен скрипт. Некоторое время уже пытался такое написать но скрипт все еще не работает. Сложности тут вот какие. Так как jQuery начинает работать после полной загрузке всего в нутри его не получится выбрать номер нашего текущего скрипта. Это нужно делать в яваскрипте на этапе загрузки. Но потом как то полученный параметр нужно передать в сам жквери. Можно было бы использовать для этого какой то из общедоступных элементов, но какой опять же проблема. Думаю как то так делать.

<div> <!-- К этому элементу нужно прикрепить все мои события -->
	<script>
		$(function(){
			$("body").data("script").parent().on("click", "a", function(){
				alert("Клик");
			});
		}).find("body").data("script", $(document.scripts[document.scripts.length-1]))
	</script>
	<a>Нажимаем</a>
</div>

Если скрипт один такой на странице, все нормально. Но как только их больше одного, скрипты начинают друг другу мешать. Возможно как то еще удасться передать номер текущего скрипта в jQuery?.

Я думал как то так сделать но у меня такая схема не заработала, может кто подскажет что делаю не правильно. Это был бы наверно идеальный вариант. Но заработать у меня ему не удалось. Что поменять сам плохо представляю.

<div> <!-- К этому элементу нужно прикрепить все мои события -->
	<script>
		(function($, script){
			$(script).parent().on("click", "a", function(){
				alert("Клик");
			});
		})(jQuery, document.scripts[document.scripts.length-1])
	</script>
</div>

Последний раз редактировалось mpak, 13.12.2014 в 05:53.
Ответить с цитированием
  #2 (permalink)  
Старый 13.12.2014, 10:15
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Месье знает толк... Последний код рабочий, но в диве нет тега "a".

Последний раз редактировалось jsnb, 13.12.2014 в 10:24.
Ответить с цитированием
  #3 (permalink)  
Старый 13.12.2014, 18:32
Интересующийся
Отправить личное сообщение для mpak Посмотреть профиль Найти все сообщения от mpak
 
Регистрация: 13.12.2014
Сообщений: 13

Сообщение от jsnb Посмотреть сообщение
Месье знает толк... Последний код рабочий, но в диве нет тега "a".
Последний код я не смог запустить Проверьте правильно он работает но не верно. Я так понимаю в нем всетаки что то не так.
Ответить с цитированием
  #4 (permalink)  
Старый 13.12.2014, 18:42
Интересующийся
Отправить личное сообщение для mpak Посмотреть профиль Найти все сообщения от mpak
 
Регистрация: 13.12.2014
Сообщений: 13

Сообщение от jsnb Посмотреть сообщение
Месье знает толк... Последний код рабочий, но в диве нет тега "a".
Проверил действительно все работает. В прошлый раз скрипт такой ловил какие то глюки от которых не получалось избавится. Сейчас вроде все нормально. Спасибо подсказали.

Для себя удобство подобной схемы обьясняю так. Мы рабоатет с элементами. Их вложенность постоянно учитывается в DOM дереве элементов. Так чем скрипт отличается от остальных? Плюс сама практика вешать события не на каждый элемент по отдельности а одно событие на родительский элемент также становится хорошей практикой. Так почему бы не иметь возможность просто закинуть скрипт в нужный элемент. Все события сами повиснут на тег в который мы закинули скрипт. Перевесить все события на элемент выше или ниже становится делом секунд. Никакие идентификаторы в скрипте кроме место его расположения не используется. Очень удобно.

Последний раз редактировалось mpak, 13.12.2014 в 18:48.
Ответить с цитированием
  #5 (permalink)  
Старый 14.12.2014, 00:32
Аватар для bes
bes bes вне форума
Профессор
Отправить личное сообщение для bes Посмотреть профиль Найти все сообщения от bes
 
Регистрация: 22.03.2012
Сообщений: 3,744

Сообщение от mpak
Для себя удобство подобной схемы обьясняю так. Мы рабоатет с элементами. Их вложенность постоянно учитывается в DOM дереве элементов. Так чем скрипт отличается от остальных? Плюс сама практика вешать события не на каждый элемент по отдельности а одно событие на родительский элемент также становится хорошей практикой. Так почему бы не иметь возможность просто закинуть скрипт в нужный элемент. Все события сами повиснут на тег в который мы закинули скрипт. Перевесить все события на элемент выше или ниже становится делом секунд. Никакие идентификаторы в скрипте кроме место его расположения не используется. Очень удобно.
делегирование событий не становится, а давно практикуется
всё это сомнительно хорошо, пока не начнёшь модернизировать html
и ладно, если ты сам, а не для тебя
Ответить с цитированием
  #6 (permalink)  
Старый 14.12.2014, 02:50
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072


<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
<div> <!-- К этому элементу нужно прикрепить все мои события -->
	<script>
			$("script:last").parent().on("click", "a", function(){
				alert("Клик 1");
			});
	</script>
	<a>Нажимаем</a>
</div>
<div> <!-- К этому элементу нужно прикрепить все мои события -->
	<script>
			$("script:last").parent().on("click", "a", function(){
				alert("Клик 2");
			});
	</script>
	<a>Нажимаем</a>
</div>
Ответить с цитированием
  #7 (permalink)  
Старый 14.12.2014, 10:18
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

Вы меня конечно извините, но по моему это говнокодинг. Лучше уж вешать события через HTML-атрибуты, вызывая тем самым нужную ф-цию.
Ответить с цитированием
  #8 (permalink)  
Старый 15.12.2014, 00:06
Интересующийся
Отправить личное сообщение для mpak Посмотреть профиль Найти все сообщения от mpak
 
Регистрация: 13.12.2014
Сообщений: 13

Будьте добры обьяснить свой наезд с говнокодом. Лично мое мнение противоположное. Чем больше навешивается классов и идентификаторов, тем более атрибутов не по случаю тем больше это считаю говнокодом. Каждый, кто работает не разбирается почему висит тот или иной атрибут. Каждый предпочитает повесить свой. В итоге это превращается в месиво каждый из классов которых боишься убрать так как может что нибудь отвалиться. Говнокод это навешиваение на элемент не нужных идентификаторов. Зачем они если можно обойтись без них?.

Всегда считал функцию

$(function(){
})

Обязательной. Читал, что это связано выполнением скрипта, что он должен выполняться после прогрузки всех элементов. А в коде выше jQuery код не обернут и тем самым выполняется по мере загрузки страницы. Есть какая нибудь принципиальная разница с оберткой или без?

Последний раз редактировалось mpak, 15.12.2014 в 00:14.
Ответить с цитированием
  #9 (permalink)  
Старый 15.12.2014, 01:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Сообщение от mpak
Читал, что это связано выполнением скрипта, что он должен выполняться после прогрузки всех элементов. А в коде выше jQuery код не обернут и тем самым выполняется по мере загрузки страницы. Есть какая нибудь принципиальная разница с оберткой или без?
если вы не ответили в своём вопросе на ваш вопрос, то прочитайте ещё раз.
коду нужно не все элементы а те с которыми этот код работает ... поэтому в jquery решили лучше подождать пока все загрузятся, чтобы наверняка был элемент с которым кодер, хотел поработать, но хитрый кодер, наверняка сможет навесить функцию на несуществующий элемент, чтоб потом возмущаться почему ничего не работает
Ответить с цитированием
  #10 (permalink)  
Старый 15.12.2014, 03:02
Профессор
Отправить личное сообщение для jsnb Посмотреть профиль Найти все сообщения от jsnb
 
Регистрация: 15.03.2014
Сообщений: 561

Сообщение от mpak
Никакие идентификаторы в скрипте кроме место его расположения не используется. Очень удобно.
И чем это удобнее? Замена шила на мыло. С идентификаторами хоть можно конфиг какой-нибудь в одном месте создать, а с таким подходом идет вообще полное смешивание логики и представления.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как получить данные из php скрипта в расширении для Safari? housewm Opera, Safari и др. 2 19.12.2013 18:31
ООП наследование. Как получить доступ к методам родителя? ShuggyBumblebee Общие вопросы Javascript 5 04.12.2013 00:44
Можно ли в жс получить родителя метода? grifangel Общие вопросы Javascript 5 26.10.2013 12:40
получить непрямого родителя torsar Events/DOM/Window 2 14.03.2013 10:33
Получить результат выполнения скрипта на сервере в переменную ява gyper AJAX и COMET 5 19.11.2012 11:36