Задать вопрос
@lenkagruzd

Yii: Pjax + JQuery.click() + setIntreval. Почему выполняется только последний click?

Здравствуйте.
Во view в цикле foreach выводится 1 или больше PJax.
Внутри pjax ссылка с классом, который присущ только для этой ссылки.

Идет работа с сессиями. Пытаемся обновлять счетчик времени.

Код Pjax:
<?php Pjax::begin([
    'enablePushState' => false,
]); ?>
<?php 
         $old_date = new DateTime($order['creation_time']);
         $old_date->add(new DateInterval('P0Y0M0DT0H30M0S'));
         $now_date = new DateTime($actualtime);
         $interval = $old_date->diff($now_date, false);
         echo "<a href='/cart/gettime?id={$order['game_id']}' class='gettime'>".$interval->format("%I : %S")."</a>";
?>
<?php Pjax::end(); ?>


Код контроллера Gettime:
public function actionGettime() {

		$id = Yii::$app->request->get('id');
		if(!empty($id)) {
			$session = Yii::$app->session;
			$session->open();
			$order = $session['cart'][$id];
			$actualtime = Yii::$app->formatter->asDate('now', 'php:Y-m-d H:i:s');
			
			return $this->renderAjax('gettime', compact('order', 'actualtime'));
		} else {
			return '0';
		}
	}


View( gettime ) возвращаемый контроллером соответствует коду в Pjax.

Код скрипта:
$(document).ready(function() {
       setInterval(function(){ 
             $('.gettime').each(function() {
                    $(this).click();
             });
        }, 1000);
    });


Что мы имеем в итоге:
  • Все успешно работает, если имеем только одну итерацию в цикле foreach.
  • Если итераций больше одной, то обновление Pjax происходит только у последней итерации.


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

Если заменить JQuery.click() на, к примеру,
var g = $(this).attr('id');
console.log(g);

, то мы получаем нужный нам результат для каждого элемента.

Интервал увеличивал, delay для click() ставил. Все одно. В какой сторону копать?
  • Вопрос задан
  • 67 просмотров
Подписаться 1 Средний 2 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы