Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 06.11.2016, 03:28
Интересующийся
Отправить личное сообщение для Antonqq Посмотреть профиль Найти все сообщения от Antonqq
 
Регистрация: 05.11.2016
Сообщений: 18

Помогите с jquery parents()
Всем привет, столкнулся с такой проблемой:
Есть дерево, нужно вывести data-id родителя, а он мне выдает data-id самого первого родителя.
Т.е. когда кликаю на "кат 2", по идее должно вывести data-id=1, а выводит 0
$('li').click (function(){
	var id_res = $(this).parents().parents().attr('data-id');
	$('.result').html(id_res);
})


<div class="tree dd" id="nestable" data-id="0">
	<ul class="dd-list add_new_item">
		<li class="dd-item" data-id="1">	кат 1
			<ul class="dd-list">
				<li class="dd-item"  data-id="2" >кат 2</li>
			</ul>
		</li>				
	</ul>
</div>


Пробовал ставить:
.parents()

вместо:
.parents().parents()

Тогда пишет undefined

Последний раз редактировалось Antonqq, 06.11.2016 в 03:31.
Ответить с цитированием
  #2 (permalink)  
Старый 06.11.2016, 03:54
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,514

Не надо плодить темы. По сути все ваши вопрос следовало бы обсуждать в одной единственной, т.к. они взаимосвязаны.
$('li').click (function(event){
  event.stopPropagation(); //останавливаем всплытие 
  var id_res = $(this).parents('[data-id]:first').data('id'); //получаем первого предка с атрибутом data-id, получаем значение этого атрибута
  $('.result').html(id_res);
})
Каюсь, в предыдущей теме я не проверял результат и забыл остановить всплытие, потому событие клик срабатывало на всех li по порядку снизу вверх и результат, соответственно, каждый раз перезаписывался.

P.S. ".parents()" - это все родители, потому ".parents().parents()" - это бессмысленно. Может всё-таки начнёте читать документацию, а не гадать на кофейной гуще?
__________________
29375, 35

Последний раз редактировалось Aetae, 06.11.2016 в 04:01.
Ответить с цитированием
  #3 (permalink)  
Старый 06.11.2016, 18:34
Интересующийся
Отправить личное сообщение для Antonqq Посмотреть профиль Найти все сообщения от Antonqq
 
Регистрация: 05.11.2016
Сообщений: 18

Извините за назойливость, но у меня опять проблемка.(
Добавляю текст на элемент при нажатии, а он дублируется во все потомки дерева
Не могу по этому поводу ничего найти
$("li").dblclick(function(event){
	event.stopPropagation();
	$(this).find('.dd-handle').text('Edit');
});
Ответить с цитированием
  #4 (permalink)  
Старый 06.11.2016, 19:15
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,514

find - Отыскивает [все] дочерние элементы, которые удовлетворяют указанному выражению.
$(this).find('.dd-handle:first').text('Edit');
:first - Соответствуют первому выбранному элементу..
__________________
29375, 35
Ответить с цитированием
  #5 (permalink)  
Старый 06.11.2016, 21:31
Интересующийся
Отправить личное сообщение для Antonqq Посмотреть профиль Найти все сообщения от Antonqq
 
Регистрация: 05.11.2016
Сообщений: 18

Взгляните пожалуйста на этот код
Не пойму почему 4-ая строка в js не работает
$("li").dblclick(function(event){
	event.stopPropagation();
	$(this).find('.dd-handle:first').text('edit - >');
 	$(this).find('[type="text"]:first').value = "123";
});


<li class="dd-item">
	<div class="dd3-content">
		<form id="edit_name" style="float: left;  ">
			<input type="text" name="name_text" value=""/>
			<input type="submit" value="OK"/>
		</form>
	</div>
</li>
Ответить с цитированием
  #6 (permalink)  
Старый 06.11.2016, 22:06
Аватар для Aetae
Тлен
Отправить личное сообщение для Aetae Посмотреть профиль Найти все сообщения от Aetae
 
Регистрация: 02.01.2010
Сообщений: 6,514

Потому что jquery объект - это jquery объект, а dom элемент - это dom элемент. У них разные методы и свойства.

vanilla.js:
this.querySelector('[type="text"]').value = "123";
jquery:
$(this).find('[type="text"]:first').val("123");
__________________
29375, 35
Ответить с цитированием
  #7 (permalink)  
Старый 08.11.2016, 05:09
Интересующийся
Отправить личное сообщение для Antonqq Посмотреть профиль Найти все сообщения от Antonqq
 
Регистрация: 05.11.2016
Сообщений: 18

Столкнулся с таким методом как
change

Все работает, но кое-что хотелось бы исправить.
$('input[name=name_text]').change(function (){
// код
});

Оно срабатывает только тогда, когда input изменил value.
Можно ли сделать так, чтобы он срабатывал, когда пользователь перестает его редактировать, даже если изменений не произошло ?
Ответить с цитированием
  #8 (permalink)  
Старый 08.11.2016, 15:35
Интересующийся
Отправить личное сообщение для Antonqq Посмотреть профиль Найти все сообщения от Antonqq
 
Регистрация: 05.11.2016
Сообщений: 18

Решил сам)
Помог метод
.blur();
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQuery ajax - помогите найти ошибку malefikus13 Общие вопросы Javascript 9 12.08.2015 13:36
Помогите сделать выполнение jquery при загрузке страницы acidjazzz jQuery 3 30.03.2015 14:27
помогите со скриптом jquery hesrun jQuery 24 22.02.2013 12:59
Помогите с Jquery trad Общие вопросы Javascript 5 22.01.2013 19:58
помогите преобразовать javascript в jquery Rayzor jQuery 1 13.09.2012 12:00