Правильный метод включения PHP в код Javascript

Я пытаюсь добавить несколько динамических строк одним нажатием кнопки. Пример, с которым я работал, работал нормально, но по какой-то причине я думаю, что то, как я использую PHP внутри Javascript, ломает все. И я продолжаю получать эту ошибку на консоли.

Uncaught SyntaxError: неожиданный идентификатор

Вот мой HTML-код и js-код. Есть ли способ решить эту проблему?

<table class = "table table-bordered" id = "orderItems2">
                    <thead>
                        <tr>
                            <th>Product Code</th>
                            <th>WSP</th>
                            <th>Margin</th>
                            <th>DP</th>
                            <th>Std Bonus</th>
                            <th>Min Qty</th>
                            <th>Spcl Bonus</th>
                            <th>Case Size</th>
                            <th>Cases</th>
                            <th>Qty</th>
                            <th>Free Issues</th>
                            <th>Total</th>
                            <th>Current Qty</th>
                            <th>Stock Value</th>
                        </tr>
                    </thead>
</table>

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

 <tr class = "distributorItemDetails">
                            <td>
                                <div class = "form-group">
                                    <select class = "item-details form-control select2" name = "items[1][product_code]" style = "width: 100%;">
                                        <option selected = "selected" value = "" required>Select Product</option>
                                        <?php foreach ($products as $product):?>
                                            <option 
                                                data-wholesaleprice = "<?= h($product->whole_sale_price)?>" 
                                                data-distributormargin = "<?= h($product->distributor_margin)?>" 
                                                data-stdbonus = "<?= h($product->standard_bonus_minimum_qty.":".$product->standard_bonus_free_issues)?>"
                                                data-standard_bonus_minimum_qty = "<?= h($product->standard_bonus_minimum_qty)?>"
                                                data-standard_bonus_free_issues = "<?= h($product->standard_bonus_free_issues)?>"
                                                data-minqty = "<?= h($product->minimum_qty_to_apply_special_bonus)?>" 
                                                data-scplbonus = "<?= h($product->special_bonus_minimum_qty.":".$product->special_bonus_free_issues)?>" 
                                                data-special_bonus_minimum_qty = "<?= h($product->special_bonus_minimum_qty)?>" 
                                                data-special_bonus_free_issues = "<?= h($product->special_bonus_free_issues)?>" 
                                                data-casesize = "<?= h($product->case_size)?>"
                                                value = "<?= h($product->product_code)?>" required><?= h($product->product_code)?>
                                            </option>
                                        <?php endforeach; ?>
                                    </select>
                                </div>
                            </td>
                            <td>
                                <div class = "form-group">
                                    <input type = "number" class = "form-control val-wholesaleprice" name = "items[1][wholesale_price]" required min = "0" step = "any" readonly>
                                </div>
                            </td>
                            <td>
                                <div class = "form-group">
                                    <input type = "number" class = "form-control val-distributormargin" name = "items[1][distributor_margin]" required min = "0" step = "any" readonly>
                                </div>
                            </td>
                            <td>
                                <div class = "form-group">
                                    <input type = "number" class = "form-control val-distributorprice" name = "items[1][distributor_price]" readonly>
                                </div>
                            </td>
                            <td>
                                <div class = "form-group">
                                    <input type = "text" class = "form-control val-sb" name = "items[1][standard_bonus]" readonly>
                                </div>
                            </td>
                            <td>
                                <div class = "form-group">
                                    <input type = "number" class = "form-control val-minqty" name = "items[1][min_qty]" readonly>
                                </div>
                            </td>
                            <td>
                                <div class = "form-group">
                                    <input type = "text" class = "form-control val-scplbonus" name = "items[1][special_bonus]" readonly>
                                </div>
                            </td>
                            <td>
                                <div class = "form-group">
                                    <input type = "number" class = "form-control val-casesize" name = "items[1][case_size]" readonly>
                                </div>
                            </td>
                            <td>
                                <div class = "form-group">
                                    <input type = "number" class = "form-control val-noofcases" name = "items[1][no_of_cases]">
                                </div>
                            </td>
                            <td>
                                <div class = "form-group">
                                    <input type = "number" class = "form-control val-totalqty" name = "items[1][total_qty]" readonly>
                                </div>
                            </td>
                            <td>
                                <div class = "form-group">
                                    <input type = "number" class = "form-control val-freeissues" name = "items[1][total_free_issues]" readonly>
                                </div>
                            </td>
                            <td>
                                <div class = "form-group">
                                    <input type = "number" class = "form-control val-totalprice" name = "items[1][total_value]" readonly>
                                </div>
                            </td>
                            <td>
                                <div class = "form-group">
                                    <input type = "number" class = "form-control val-currentqty" name = "items[1][balance_stock]">
                                </div>
                            </td>
                            <td>
                                <div class = "form-group">
                                    <input type = "number" class = "form-control val-stockvalue" name = "items[1][stock_value]" readonly>
                                </div>
                            </td>
                        </tr> 

Кнопка HTML, предполагающая добавление новой строки

<a class = "btn btn-primary addNewRow" id = "addtwo" ><i class = "fa fa-plus"></i></a>

JS и сценарий PHP, который у меня есть.

<script>
var count=1;
$("#addtwo").click(function(){
    var html = "<tr class='distributorItemDetails'><td><div class='form-group'><select class='item-details form-control select2' name='items["+count+"][product_code]' style='width: 100%;'><option selected='selected' required>Select Product</option>"<?php foreach ($products as $product):?>" <option data-wholesaleprice = "<?= h($product->whole_sale_price)?>" data-distributormargin = "<?= h($product->distributor_margin)?>" data-stdbonus = "<?= h($product->standard_bonus_minimum_qty."':'".$product->standard_bonus_free_issues)?>" data-standard_bonus_minimum_qty = "<?= h($product->standard_bonus_minimum_qty)?>" data-standard_bonus_free_issues = "<?= h($product->standard_bonus_free_issues)?>" data-minqty = "<?= h($product->minimum_qty_to_apply_special_bonus)?>" data-scplbonus = "<?= h($product->special_bonus_minimum_qty."':'".$product->special_bonus_free_issues)?>" data-special_bonus_minimum_qty = "<?= h($product->special_bonus_minimum_qty)?>" data-special_bonus_free_issues = "<?= h($product->special_bonus_free_issues)?>" data-casesize = "<?= h($product->case_size)?>" value = "<?= h($product->product_code)?>" required>"<?= h($product->product_code)?>"</option>"<?php endforeach; ?>"'</select></div></td><div class='form-group'><input type='number' class='form-control val-wholesaleprice' name='items["+count+"][wholesale_price]' required min='0' step='any' readonly></div></td><td><div class='form-group'><input type='number' class='form-control val-distributormargin' name='items["+count+"][distributor_margin]' required min='0' step='any' readonly></div></td><td><div class='form-grou'><input type='number' class='form-control val-distributorprice' name='items["+count+"][distributor_price]' readonly></div></td><td><div class='form-group'><input type='text' class='form-control val-sb' name='items["+count+"][standard_bonus]' readonly></div></td><td><div class='form-group'><input type='number' class='form-control val-minqty' name='items["+count+"][min_qty]' readonly></div></td><td><div class='form-group'><input type='text' class='form-control val-scplbonus' name='items["+count+"][special_bonus]' readonly></div></td><td><div class='form-group'><input type='number' class='form-control val-casesize' name='items["+count+"][case_size]' readonly></div></td><td><div class = "form-group"><input type='number' class='form-control val-noofcases' name='items["+count+"][no_of_cases]'></div></td><td><div class='form-group'><input type='number' class='form-control val-totalqty' name='items["+count+"][total_qty]' readonly></div></td><td><div class='form-group'><input type='number' class='form-control val-freeissues' name='items["+count+"][total_free_issues]' readonly></div></td><td><div class='form-group'><input type='number' class='form-control val-totalprice' name='items["+count+"][total_value]' readonly></div></td><td><div class='form-group'><input type='number' class='form-control val-currentqty' name='items["+count+"][balance_stock]'></div></td><td><div class='form-group'><input type='number' class='form-control val-stockvalue' name='items["+count+"][stock_value]' readonly></div></td></tr>";

    $("#orderItems2").append(html);
    count++;
});

Как выглядит отрендеренный <script> после обработки PHP? Ошибка там.

CertainPerformance 08.01.2019 08:21

отформатируйте свой код нормально. В вашем JS-скрипте есть только одна строка, которая очень длинная и трудная для чтения.

quirimmo 08.01.2019 08:21

@quirimmo, подожди, я отредактирую код.

Kasun Wijesekara 08.01.2019 08:22

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

arkascha 08.01.2019 08:23

@arkascha - вы можете встраивать и запускать PHP внутри JavaScript. Вы можете встроить и запустить PHP внутри текстового потока любой.

Quentin 08.01.2019 08:25

Привет, это обсуждается на stackoverflow.com/questions/3352576/…

Shashank Malviya 08.01.2019 08:26

@Quentin Очень забавно. Вы действительно думаете, что здесь это помогает?

arkascha 08.01.2019 08:27

@arkascha - Я не шутил, ты просто ошибался.

Quentin 08.01.2019 08:28

@CertainPerformance код слишком длинный, чтобы скопировать его сюда. Дублируется вот так - i.imgur.com/lCTRINC.png

Kasun Wijesekara 08.01.2019 08:29

@arkascha На данный момент не совсем понятно, пытается ли OP использовать выполнять PHP изнутри JS (очевидно, неправильно) или печатать текст из PHP для его JS (неэлегантно, но нормально, если синтаксис обрабатывается правильно)

CertainPerformance 08.01.2019 08:29

@KasunWijesekara Невозможно легко отладить изображение без текста. Посмотрите, какой номер столбца вызывает ошибку, а затем посмотрите на JS там.

CertainPerformance 08.01.2019 08:31

@arkascha, подождите, я отредактирую свой код, чтобы показать, какую динамическую строку я пытаюсь получить. Таким образом, в основном строка имеет раскрывающийся список, который извлекает данные в соответствии с опцией раскрывающегося списка. Я собираюсь добавить код в строку по умолчанию, которую пытаюсь сгенерировать.

Kasun Wijesekara 08.01.2019 08:31

Проверьте сейчас, я редактировал вопрос. Итак, добавленный мной фрагмент кода - это статические строки, которые у меня есть в приложении. Мне нужно получить больше этих строк, когда я нажимаю кнопку.

Kasun Wijesekara 08.01.2019 08:34

@CertainPerformance Конечно, это вопрос, который я пытался выяснить в своем комментарии.

arkascha 08.01.2019 08:34

Вы не ответили на мой первоначальный вопрос. Для меня это как-то выглядит так, будто вы пытаетесь запустить php изнутри javascript. Что не сработает.

arkascha 08.01.2019 08:36

@arkascha да, я пытаюсь это сделать. Проверю приколотую нить и найду другой способ. Спасибо за помощь ребята!

Kasun Wijesekara 08.01.2019 08:39

@Quentin Да, вы правы с формальной точки зрения. Я попытался выяснить, есть ли у OP очевидная проблема размещения буквального кода php внутри javascript, который должен выполняться на стороне клиента, или этот код php должен обрабатываться при доставке кода клиенту, где должен быть javascript выполнен. Я думал, что это ясно из моего вопроса. Я только попытался выразить свое чувство, что то, как вы сформулировали свое исправление, не помогает ОП, учитывая, что, скорее всего, у него нет многолетнего опыта. Извините, если я неправильно сформулировал свою реакцию и оттолкнул вас.

arkascha 08.01.2019 08:39
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
17
44
0

Другие вопросы по теме