Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Помогите моему скрипту "найти" объект (https://javascript.ru/forum/events/69623-pomogite-moemu-skriptu-najjti-obekt.html)

Огонек 06.07.2017 19:59

Помогите моему скрипту "найти" объект
 
Здравствуйте.
Привожу фрагмент скрипта.Эта функция выводит результаты поиска в виде нескольких панелек с кнопками Выбрать для каждого результата:
function searchCustomers(func_search)
	{
		$.ajax({
			type:"POST",
			url : "{$link->getAdminLink('AdminCustomers')}",
			async: true,
			dataType: "json",
			data : {
				ajax: "1",
				tab: "AdminCustomers",
				action: func_search ,
				customer_search: $('#customer').val()},
			success : function(res)
			{
				if(res.found)
				{
					var html = '';
					$.each(res.customers, function() {
						html += '<div class="customerCard col-lg-4">';
						html += '<div class="panel">';
						html += '<div class="panel-heading">'+this.firstname+' '+this.lastname;
						html += '<span class="pull-right">#'+this.id_customer+'</span></div>';
						html += '<span>'+this.email+'</span><br/>';
						html += '<span class="text-muted">'+((this.birthday != '0000-00-00') ? this.birthday : '')+'</span><br/>';
						html += '<div class="panel-footer">';
						html += '<a href="{$link->getAdminLink('AdminCustomers')}&id_customer='+this.id_customer+'&viewcustomer&liteDisplaying=1" class="btn btn-default fancybox"><i class="icon-search"></i> {l s='Details'}</a>';
						html += '<button type="button" data-customer="'+this.id_customer+'" class="setup-customer btn btn-default pull-right"><i class="icon-arrow-right"></i> {l s='Choose'}</button>';
						html += '</div>';
						html += '</div>';
						html += '</div>';
					});
				}
				else
					html = '<div class="alert alert-warning">{l s='No customers found'}</div>';
				$('#customers').html(html);
				resetBind();
			}
		});
	}

а также скрипт по нажатию на любую из кнопочек из строки №27
$('#customer_part').on('click','button.setup-customer',function(e){
			e.preventDefault();
			chooseCustomer($(this));
		});


Хочу добавить программное нажатие первой из этих кнопочек при открытии формы.
Испробовал с десяток вариантов, все приводить не буду, только последний из них (все равно все не рабочие :) )
$('#customer_part').find('setup-customer').click();

как нажать на первую по списку кнопочку?

j0hnik 06.07.2017 21:11

$('#customer_part').find('.setup-customer').trigger( "click" );


так пробовали?

Огонек 06.07.2017 21:37

Цитата:

Сообщение от j0hnik
$('#customer_part').find('.setup-customer').trigger( "click" );

Попробовал - не помогает.
А может быть скрипт просто не успевает после ajax запроса "отрисовать" результаты и кнопки просто нет в момент её нажатия?
У меня идет так
searchCustomers("searchCustomersById");
$('#customer_part').find('.setup-customer').trigger( "click" );

j0hnik 06.07.2017 22:03

тогда про complete callback function поищите примеры

Огонек 06.07.2017 22:22

Цитата:

Сообщение от j0hnik
тогда про complete callback function поищите примеры

А почему бы просто не разместить нажатие кнопки после строки 36? (хотя и там не работает. правда не проверял весь свой десяток вариантов)

j0hnik 06.07.2017 22:43

собственно он должен быть в коде ниже создания элемента и назначения обработчика события.

Огонек 06.07.2017 22:58

Докладываю
Вынес программное нажатие в новую тестовую кнопку
результат - и ваш и мой вариант работают, т.е. "находят" кнопку и нажимают.
А про " обернуть в ready " не очень понятно, ведь если я правильно понимаю, ready у объекта наступает когда document стал ready, а не после его персональной перерисовки
$('#customers').html(html);

Огонек 06.07.2017 22:59

И вопрос: уведомления на почту об ответе только у меня приходят через раз?

j0hnik 06.07.2017 23:00

Цитата:

Сообщение от Огонек (Сообщение 457850)
Докладываю
Вынес программное нажатие в новую тестовую кнопку
результат - и ваш и мой вариант работают, т.е. "находят" кнопку и нажимают.
А про " обернуть в ready " не очень понятно, ведь если я правильно понимаю, ready у объекта наступает когда document стал ready, а не после его персональной перерисовки
$('#customers').html(html);

ну не документ а элемент $('#customer_part') в данном случае

j0hnik 06.07.2017 23:03

Цитата:

Сообщение от Огонек (Сообщение 457851)
И вопрос: уведомления на почту об ответе только у меня приходят через раз?

не могу точно сказать в чем причина, почта на том же домене? в папке спам гляньте.

Огонек 06.07.2017 23:05

Это я понял, я имел ввиду "поле".ready возникнет только в момент "документ".ready, а не после "поле".refresh (условно). Или я не прав?

Огонек 06.07.2017 23:16

Цитата:

Сообщение от j0hnik
Сообщение от Огонек
И вопрос: уведомления на почту об ответе только у меня приходят через раз?
не могу точно сказать в чем причина, почта на том же домене? в папке спам гляньте.

На ваши 5 ответов - 3 оповещения. В спаме чисто. Почта на мэйл.ру

Огонек 06.07.2017 23:31

Если я еще не надоел, то после длительных танцев ситуация такая:
Изначально вышеуказанная функция поиска вызывается при наборе букв в поле поиска:
$('#customer_for_search').typeWatch({
			captureLength: 3,
			highlight: true,
			wait: 100,
			callback: function(){ searchCustomers("searchCustomers"); }
			});

я хочу чтобы при открытии страницы уже был выбран "Вася", для этого пишу
$(document).ready(function() {
...
		$('#customer_for_search').val('Вася');
		searchCustomers("searchCustomers");
		$('#customer_for_search').val('');
...

все нормально, Вася ищется и находится, но нужно еще автоматически нажать кнопку "Выбрать".
Для этого в функции поиска ставлю
else
					html = '<div class="alert alert-warning">{l s='No customers found'}</div>';
				$('#customers').html(html);
				resetBind();
// нажатие кнопки 
				$('#customer_part').find('.setup-customer').trigger( "click" );


и дальше самое интересное - кнопка "сама нажимается" только если я с клавиатуры набираю "вася" или "петя", а при обновлении страницы (после document.ready) не нажимается.
Почему?

j0hnik 07.07.2017 00:05

Цитата:

Сообщение от Огонек (Сообщение 457855)
Это я понял, я имел ввиду "поле".ready возникнет только в момент "документ".ready, а не после "поле".refresh (условно). Или я не прав?

да, правы не оборачивайте, это я ерунду сказал, он динамический же.

j0hnik 07.07.2017 00:09

Цитата:

Сообщение от Огонек (Сообщение 457856)
На ваши 5 ответов - 3 оповещения. В спаме чисто. Почта на мэйл.ру

создайте почту на том же домене, на некоторых хостингах беда с доставкой в ящик на другом домене, сам сталкивался.

Огонек 07.07.2017 00:11

это ерунда, лучше по проблеме :) :)

j0hnik 07.07.2017 00:23

на счет только с клавиатуры, сложно точно сказать, видимо эта функция работает с событием keyup, keypress или kedown, попробовать заменить на input или change

Огонек 07.07.2017 00:27

Цитата:

Сообщение от j0hnik (Сообщение 457868)
на счет только с клавиатуры, сложно точно сказать, видимо эта функция работает с событием keyup, keypress или kedown, попробовать заменить на input или change

С функцией-то проблем нет, проблема в том что не выполняется строка "нажимания" на кнопку, если не вводить с клавиатуры, а при document.ready

Огонек 07.07.2017 00:30

т.е. typeWatch работает как надо, а вот без нее - не работает

j0hnik 07.07.2017 00:44

я если честно запутался, если document ready мешает и все работает без него почему бы не убрать его?

Огонек 07.07.2017 00:59

набор с клавиатуры в "поле А" вызывает А.typeWatch, который вызывает "ajax запрос B", в конце обработки этого запроса стоит (объект).click
так работает нормально
если поставить в document.ready функцию, которая вызывает этот же "ajax запрос В", то (объект).click в конце обработки не работает (то ли не срабатывает, то ли (объект) у которого этот click вызывается не виден скрипту)

Огонек 07.07.2017 01:02

Цитата:

Сообщение от j0hnik
если document ready мешает и все работает без него почему бы не убрать его?

как убрать, если нужно запустить скрипт при загрузке страницы?

Огонек 07.07.2017 01:12

Цитата:

Сообщение от j0hnik
собственно он должен быть в коде ниже создания элемента и назначения обработчика события.

Все заработало, когда присмотрелся к этой фразе
Извините неуча!

j0hnik 07.07.2017 01:13

ну и отлично!


Часовой пояс GMT +3, время: 11:49.