Не срабатывает e.preventDefault(а может и не он)

Вопросы по вёрстке и JavaScript
Ответить
sham63
Сообщения: 62
Зарегистрирован: 2017.10.07, 17:38

Не срабатывает e.preventDefault(а может и не он)

Сообщение sham63 » 2019.04.07, 17:25

Доброго времени суток, уважаемые форумчане!
Изучая урок по Yii2(разработка корзины товаров), столкнулся с проблемой:
Почему то при обращении к контроллеру перебрасывает, хотя вроде как должна быть обработка без перезагрузки.

Контроллер Корзины

Код: Выделить всё

<?php
namespace frontend\controllers;

use Yii; 
use yii\web\Controller; 
use yii\filters\AccessControl;

// Магазин
use common\modules\shop\models\Product;
use common\modules\shop\models\Category;
use frontend\models\Cart;


class CartController extends Controller
{
   
   public function actionAdd()
   {
        $id = Yii::$app->request->get('id');
        $product = Product::findOne($id);
        if(empty($product)) return false;
        $session = Yii::$app->session;
        $session->open();
        $cart = new Cart();
        $cart->addToCart($product);
   }

    
}


Модель Корзины

Код: Выделить всё

<?php

namespace frontend\models;

use Yii;
 

class Cart extends \yii\db\ActiveRecord
{
	public function AddToCart($product,$qty=1)
	{
		return 'ok';
	}
}

?>

Вид кнопки

Код: Выделить всё

<a data-id="<?=$p->id?>" href="<?= \yii\helpers\Url::to(['cart/add','id'=>$p->id])?>"  class="btn btn-success add-to-cart">   Добавить в корзину</a>

Сам js обработчик

Код: Выделить всё

 

$('.add-to-cart').on('click', function(e) {
	  e.preventDefault();
	var id = $(this).data('id');
	$.ajax({
		url: '/cart/add',
		data: (id: id),
		type: 'GET',
		success: function(res){
			alert('res'); 
		},
		error: function(){
			alert('error'); 
		},
	});
 	 
}
);

Как должно работать
Список кнопок с data-id=ИдТовара. Кликаем на товар, в консоли выводится информация о товаре.

Как работает у меня
Список кнопок с data-id=ИдТовара. Кликаем, перекидывает на новую страницу.(С выводом информации о товаре нет, модель подключена)

Помогите разобраться, заранее благодарен за ваши ответы! ;)

Аватара пользователя
AZA
Сообщения: 52
Зарегистрирован: 2018.01.02, 17:13

Re: Не срабатывает e.preventDefault(а может и не он)

Сообщение AZA » 2019.04.07, 17:53

Попробуй после ajax написать return false;

sham63
Сообщения: 62
Зарегистрирован: 2017.10.07, 17:38

Re: Не срабатывает e.preventDefault(а может и не он)

Сообщение sham63 » 2019.04.07, 18:21

AZA писал(а):
2019.04.07, 17:53
Попробуй после ajax написать return false;
Вот так? Пробовал, не работает.
$('.add-to-cart').on('click', function(e) {
e.preventDefault();
var id = $(this).data('id');
$.ajax({
url: '/cart/add',
data: (id: id),
type: 'GET',
success: function(res){
alert('res');
},
error: function(){
alert('error');
},
return false;
});

}
);

Аватара пользователя
AZA
Сообщения: 52
Зарегистрирован: 2018.01.02, 17:13

Re: Не срабатывает e.preventDefault(а может и не он)

Сообщение AZA » 2019.04.07, 18:53

Код: Выделить всё

 e.stopImmediatePropagation()
return false; оставь...

sham63
Сообщения: 62
Зарегистрирован: 2017.10.07, 17:38

Re: Не срабатывает e.preventDefault(а может и не он)

Сообщение sham63 » 2019.04.07, 19:29

AZA писал(а):
2019.04.07, 18:53

Код: Выделить всё

 e.stopImmediatePropagation()
return false; оставь...
Не работает :(
$('.add-to-cart').on('click', function(e) {
// e.preventDefault();
e.stopImmediatePropagation()

var id = $(this).data('id');
$.ajax({
url: '/cart/add',
data: (id: id),
type: 'GET',
success: function(res){
alert('res');
},
error: function(){
alert('error');
},
return false;
});

}
);

Ivan Kosh
Сообщения: 12
Зарегистрирован: 2019.04.02, 07:03

Re: Не срабатывает e.preventDefault(а может и не он)

Сообщение Ivan Kosh » 2019.04.07, 20:37

return false не там, его бы еще строчкой ниже

sham63
Сообщения: 62
Зарегистрирован: 2017.10.07, 17:38

Re: Не срабатывает e.preventDefault(а может и не он)

Сообщение sham63 » 2019.04.07, 20:45

Ivan Kosh писал(а):
2019.04.07, 20:37
return false не там, его бы еще строчкой ниже
Если вот так, то та же история.

Код: Выделить всё

$('.add-to-cart').on('click', function(e) {
	   //e.preventDefault();
	   e.stopImmediatePropagation()

	var id = $(this).data('id');
	$.ajax({
		url: '/cart/add',
		data: (id: id),
		type: 'GET',
		success: function(res){
			alert('res'); 
		},
		error: function(){
			alert('error'); 
		},
		  
	});
 	return false; 
}
);

Аватара пользователя
Seagull
Сообщения: 31
Зарегистрирован: 2019.01.24, 20:00

Re: Не срабатывает e.preventDefault(а может и не он)

Сообщение Seagull » 2019.04.08, 01:50

Вы этот код где вставляете?
Breakpoint'ы внутри этого метода ставили в консоли браузера? Он вообще отрабатывает?

Ivan Kosh
Сообщения: 12
Зарегистрирован: 2019.04.02, 07:03

Re: Не срабатывает e.preventDefault(а может и не он)

Сообщение Ivan Kosh » 2019.04.08, 10:15

А если так:
$('.add-to-cart').off('click');
$('.add-to-cart').on('click'...

Ответить