Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   как выполнить клик по submit если кликать по ссылке? (https://javascript.ru/forum/jquery/36715-kak-vypolnit-klik-po-submit-esli-klikat-po-ssylke.html)

bannndi 25.03.2013 15:41

как выполнить клик по submit если кликать по ссылке?
 
Здравствуйте!

есть обработчик события клик по сабмиту, который добавляет в корзину товар. Вопрос в том, можно ли при клике по
<a href="/cart/">Перейти к заказу</a>

выполнить добавление товара в корзину, используя уже существующий обработчик сабмита?
Смысл в том, чтобы "сабмит" выполнял только добавление товара аяксом, а ссылка "перейти к заказу", сначала выполнила добавление товара в корзину (можно и без аякса), и сразу после этого направила на заданный урл.

Пробовал по разному (дублировал кнопку, селекторы менял), пока не получилось.

Максимум, чего удалось добиться пока - это создать 2 идентичные кнопки сабмит с разными id, которые раздельно выполняют добавление товара в корзину. Если идти по этому пути, то вопрос следующий: как поставить условие,
if(клик по кнопке с id2) редирект на заданный урл? :help:

схематический html:
<form>
      <select>
          <option value="1">a1</option>
      </select>

      <input type="submit" />

<a href="/cart/">Перейти к заказу</a>
      </form>


полный js:
// Аяксовая корзина
$('form.variants').live('submit', function(e) {
	e.preventDefault();
	// button = $(this).find('input[type="submit"]');
	// button = $(this).find('#buttonToCart1, #buttonToCart2');
	// button = $(this).find('#buttonToCart1');
	button = $(this).find('input[type="submit"]');
	$.ajax({
		url: "ajax/cart.php",
		data: {variant: $(this).find('option:checked').val()},
		dataType: 'json',
		success: function(data){
			$('#cart_informer').html(data);
			if(button.attr('data-result-text'))
				button.val(button.attr('data-result-text'));
		}
	});
	var o1 = $(this).offset();
	var o2 = $('#cart_informer').offset();
	var dx = o1.left - o2.left;
	var dy = o1.top - o2.top;
	var distance = Math.sqrt(dx * dx + dy * dy);
	$(this).closest('.product').find('.image img').effect("transfer", { to: $("#cart_informer"), className: "transfer_class" }, distance);	
	$('.transfer_class').html($(this).closest('.product').find('.image').html());
	$('.transfer_class').find('img').css('height', '100%');
	return false;
});

danik.js 25.03.2013 16:00

Сделай скрипт, который примет параметром id товара или что там у тебя, добавит инфу в сессию (или куда там у тебя) и перенаправит юзера на /cart/

Типа так
<a href="/add?id=xxx">Перейти к заказу</a>

bannndi 25.03.2013 16:14

Цитата:

Сообщение от danik.js (Сообщение 242546)
Типа так
<a href="/add?id=xxx">Перейти к заказу</a>

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

danik.js 25.03.2013 16:26

Цитата:

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

Нельзя. При клике по ссылке произойдет выгрузка текущей страницы и загрузка новой. Все скрипты и ajax-запросы тут же будут остановлены. Как вариант - останавливать переход (хотя тогда какой смысл в "ссылке"?), делать ajax-запрос и дожидаться ответа, и уже в ответе делать location = '/cart/'

bannndi 25.03.2013 16:56

Цитата:

Сообщение от danik.js (Сообщение 242551)
Как вариант - останавливать переход (хотя тогда какой смысл в "ссылке"?), делать ajax-запрос и дожидаться ответа, и уже в ответе делать location = '/cart/'

смысла в ссылке, конечно, уже не будет)

по моему, как раз то, что нужно. а как выполнить проверку :

Код:

если (был клик по элемнту1) то ... ?

danik.js 25.03.2013 17:14

Цитата:

Сообщение от bannndi
а как выполнить проверку

И делать такую проверку каждую милисекунду, да?
Тут другое нужно - слушать событие click.
$(el).on('click', function(event) { alert('clicked') });

Или $(el).click(fun..)

bannndi 25.03.2013 17:19

Цитата:

Сообщение от danik.js (Сообщение 242563)
И делать такую проверку каждую милисекунду, да?
Тут другое нужно - слушать событие click.
$(el).on('click', function(event) { alert('clicked') });

Или $(el).click(fun..)


круто, спасибо, буду разбираться дальше)


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