PHP и jQuery в динамическом поле

Мне хотелось бы знать, в чем я не удаюсь в следующем коде, идея - в виде с CodeIgniter, груз один array в одном select, и нажав на кнопку, возможно добавлять нового select, но когда я загружаю нового select с jQuery, оно не функционирует.

Это мой код:

<div class="row">
    <div class="col-lg-12">
        <div class="form-group">
            <label style="text-transform: uppercase">Piezas</label>
            <select id="marca" name="marca" class="form-control select2" style="width: 100%;" required>
            <?php foreach ($piezas->result() as $fila) { ?>
            <option value="<?= $fila->id_pieza; ?>"><?= $fila->descripcion; ?></option>
            <? } ?>
            </select>
        </div>
    </div>
</div>

<div class="agregando1"></div>

<div class="row">
    <div class="col-lg-12" style="text-align: left;">
        <a id="agregar_pza" href="#" title="Agregar Otro Contacto" class="btn btn-flat btn-primary">AGREGAR</a>
    </div>
</div>

И код jQuery:

$('#agregar_pza').click(function(event) {
        /* Act on the event */
        event.preventDefault();
        $('.agregando1').append('<div class="row"><div class="col-lg-12"><div class="form-group"><label style="text-transform: uppercase">Piezas</label><select name="piezas[]" class="form-control select2" style="width: 100%;" required><?php foreach ($piezas->result() as $fila) { ?><option value="<?= $fila->id_pieza; ?>"><?= $fila->descripcion; ?></option><? } ?></select></div></div></div>');
    });
5
задан 03.03.2016, 17:44
2 ответа

Не видя примера произведенного кода и не зная, есть ли ошибки в консоли (и какие), очень трудно идентифицировать, где проблема с кодом, который ты показываешь. Он мог бы происходить в пользу многих различных мотивов.

Возможная причина 1: short-open tag не вынесенный

Как показывает Диего Гальегос в Вашем ответе, он мог бы состоять в том, что ты имеешь <? } ?> в части PHP; но он не имеет почему. <? } ?> (short-open tag) и <?php } ?> они эквивалентные и были бы должны функционировать два (в зависимости от версии PHP и конфигурации сервера).

Кроме того, которым о нем упоминают в вопросе ("когда я загружаю новый select с jquery, оно не функционирует") кажись, что select оригинал функционирует хорошо, проблема, - когда нажимается кнопка и производится dinámicamente новость select, а следовательно все указывает на код в JavaScript/jQuery.

Решение, если это была проблема: изменись <? } ?> из-за <?php } ?>.


Возможная причина 2: Есть код PHP, впитанный внутри языка сценариев JavaScript

В коде jQuery, который ты имеешь:

$('#agregar_pza').click(function(event) {
    /* Act on the event */
    event.preventDefault();
    $('.agregando1').append('<div class="row"><div class="col-lg-12"><div class="form-group"><label style="text-transform: uppercase">Piezas</label><select name="piezas[]" class="form-control select2" style="width: 100%;" required><?php foreach ($piezas->result() as $fila) { ?><option value="<?= $fila->id_pieza; ?>"><?= $fila->descripcion; ?></option><? } ?></select></div></div></div>');
});

Есть код PHP <?php foreach ($piezas->result() as $fila) { ?><option value="<?= $fila->id_pieza; ?>"><?= $fila->descripcion; ?></option><? } ?>.

Где находится этот код? Если он в документе с расширением .js, часть PHP не будет работать и будет считаться цепь как любой другой, из-за которого select что производит новость, не будет иметь никакого выбора, который будет нужно выбирать (или у него будет единственный выбор с "мусор-PHP" как стоимость и текст).

Возможное решение, если это была проблема: двинь часть JS, у которого есть PHP, впитанный в файл PHP, таким образом команды PHP будут работать и select было бы нужно производить хорошо.

Что-то говорит мне, что это реальная причина проблемы.


Возможная причина 3: Неправильные кавычки

Если ни один из предыдущих выборов не функционирует, проблема могла бы состоять в том, что какая-либо из стоимости у него есть, кавычки, которые не убегают правильно. В части HTML ты не имел по отношению к себе, почему волновать этого, но да сейчас, когда PHP производится внутри цепи язык сценариев JavaScript.

Например, представь, что одна из стоимости Frenos O'hara. Поскольку есть простая кавычка в имени / стоимости и цепь языка сценариев JavaScript, ты определяешь ее также с простыми кавычками ('<div class="row">...'), тогда цепь сломается и язык сценариев JavaScript не удастся, когда он будет работать. Хорошее, если был снаружи случай: ты мог бы видеть ошибку в консоли языка сценариев JavaScript. Открой ее нажимая F12 на IE, или Ctrl+Shift+J в Chrome или Firefox и прицеле посмотрим появляется ошибка, когда нажимается кнопка.

Решение, если это была проблема: убеги цепи перед тем, как писать их из-за экрана (всегда это хорошая практика, которая предотвратит возможные атаки XSS). Завися, откуда они пошли, ты мог бы использовать htmlspecialchars или json_encode. В этом случае, втором выборе.


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

Кажись, что select (и структура около нее), что производится с jQuery, - то же самое, что та, которая производится изначально на странице, так что ты мог бы менять код, чтобы получать результат, эквивалентный но не зависимый от PHP и без проблем кавычек:

  1. Добавь специфический класс (p.e. fila-a-copiar) в первоначальную линию:

    <div class="row fila-a-copiar">
        <div class="col-lg-12">
            ....
    
  2. В драйвере click:

    1. Выбери последнюю линию, у которой есть класс, который ты добавил:

      var $div = $('div.fila-a-copiar:last');
      
    2. Клонируй последнюю линию, у которой есть класс линия - a-copiar

      var $clon = $div.clone();
      
    3. Добавляет клоун, где он был должен идти в документе.

Так код остался бы гораздо более чистым (я это не протестировал, возможно, что он нуждается в изменениях):

$('#agregar_pza').click(function(event) {
    /* Act on the event */
    event.preventDefault();
    var $div = $('div.fila-a-copiar:last');
    var $clon = $div.clone();
    $('.agregando1').append($clon);
});
3
ответ дан 24.11.2019, 14:47
  • 1
    Привет, спасибо за ответ, я думаю, что проблема - впитанный php., попытаюсь с c и # 243; я говорю, что ты предлагаешь мне. –  Daniel Lopez 04.03.2016, 03:40

Я думаю, что твоя ошибка находится в bracket завершения:

у Тебя есть это:

<?php foreach ($piezas->result() as $fila) { ?>
   <option value="<?= $fila->id_pieza; ?>"><?= $fila->descripcion; ?></option>
<? } ?>   <---ERROR AQUI

Должен бы быть:

<?php } ?>

я не скроллировал код, но оно казалось этим.

0
ответ дан 24.11.2019, 14:47
  • 1
    Привет, спасибо за ответ, проблема находится в php, впитанном в javascrip –  Daniel Lopez 04.03.2016, 03:41

Теги

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