Перейти к содержимому


Фото
- - - - -

Как подставить order->id в скрипт?


  • Чтобы отвечать, сперва войдите на форум
7 ответов в теме

#1 esistema1

esistema1
  • Пользователь
  • 169 сообщений

Опубликовано 06.12.2018 - 09:34

Всем здравствуйте!

 

Есть простейшая форма которая размещена на странице с заказами в админке, она передает значение {$order->track|escape} (почтовый трек номер) в файл обработчик.

 

<form id="data{$order->id}">
<input name="barcode" value="{$order->track|escape}" class="ot12" id="form-auto1">
</form>

<button name="button" type="button" form="data{$order->id}" onclick="getdetails()">Отправить</button>

 

Далее обработчик получает данные через api и возвращает их сюда

 

<div id="msg"></div>

 

За передачу в обработчик отвечает скрипт

 

{literal}
<script>
function getdetails(){
b1 = document.getElementsByName('order->id');	
	
    var barcode = $('#form-auto1').val();
  
    $.ajax({
        type: "POST",
        url: "/test/postal.php",
        data: {fname:barcode}
    }).done(function( result )
        {
            $("#msg").html( result );
        });
}
</script>
{/literal}

 

Но, так как на странице не один заказ, а несколько, то код срабатывает только для первого заказа. По идее надо изменить id в input, например на

id="form-auto1{$order->id}" 

но как это прописать в скрипте не могу понять, конструкция 

var barcode = $('#form-auto1{$order->id}').val(); 

не срабатывает.

 

Подскажите пожалуйста как подставить переменную в скрипт?


Изменено: esistema1, 06.12.2018 - 09:35


#2 phukortsin

phukortsin
  • Пользователь
  • 586 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 06.12.2018 - 09:49

Функция

 

function getdetails(){
...
}

 

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

 

Например, передавать туда параметр

function getdetails(order_id){
...
}

тогда внутри уже будет с чем работать:

var barcode = $('#form-auto1'+order_id).val();



#3 esistema1

esistema1
  • Пользователь
  • 169 сообщений

Опубликовано 06.12.2018 - 09:57

Функция

 

function getdetails(){
...
}

 

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

 

Например, передавать туда параметр

function getdetails(order_id){
...
}

тогда внутри уже будет с чем работать:

var barcode = $('#form-auto1'+order_id).val();

 

Подставил данные как Вы написали

 

<script>
function getdetails(order_id){
	
   var barcode = $('#form-auto1'+order_id).val();
  
  
    $.ajax({
        type: "POST",
        url: "/test/postal.php",
        data: {fname:barcode}
    }).done(function( result )
        {
            $("#msg").html( result );
        });
}
</script>

 

Но теперь в обработчик не передается barcode ({$order->track|escape}). В input прописал id="form-auto1{$order->id}".


Изменено: esistema1, 06.12.2018 - 09:59


#4 esistema1

esistema1
  • Пользователь
  • 169 сообщений

Опубликовано 06.12.2018 - 10:29

Все разобрался - надо было изменить onclick.

Огромное спасибо за помощь!



#5 esistema1

esistema1
  • Пользователь
  • 169 сообщений

Опубликовано 06.12.2018 - 13:02

Помогите еще пожалуйста..

Теперь у каждого заказа есть input с трек номером

 

<input placeholder="Трек номер" name="track[{$order->id}]" value="{$order->track|escape}"></input>

 

и input с местонахождением трека

 

<input id="status_pochta{$order->id}" placeholder="статус" name="status_pochta[{$order->id}]" value="{$order->status_pochta|escape}"></input>

 

Статус трека подгружается при клике на

 

<button name="button" type="button" onclick="getdetails({$order->id})">Проверить</button>

 

 

На странице несколько заказов, нажимать у каждого кнопку проверить не совсем удобно. Как сделать одну общую кнопку на это действие? Т.е. чтобы при клике на одну кнопку обработались и заполнились статусы у всех заказов на странице?



#6 phukortsin

phukortsin
  • Пользователь
  • 586 сообщений
  • Программирование, Пользователь
  • Версия CMS:2.x
  • Откуда:Львов

Опубликовано 06.12.2018 - 13:20

Примерно так:

 

К тегам button добавить атрибуты

data-order_id="{$order->id}" class="button_track"

 

Затем в новом обработчике новой кнопки

 

        $('.button_track').each (function (index, element){
            order_id = $(element).data('order_id')
            getdetails(order_id)
        })
 


Изменено: phukortsin, 06.12.2018 - 13:20


#7 esistema1

esistema1
  • Пользователь
  • 169 сообщений

Опубликовано 06.12.2018 - 13:26

Круто! Спасибо!!! 



#8 sergeevizh

sergeevizh
  • Пользователь
  • 124 сообщений
  • Откуда:Москва

Опубликовано 06.12.2018 - 14:12

Круто! Спасибо!!! 

Вы случаем не шаманите с API Почта России? 






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых