Как получить второе значение в эхо в PHP? - PullRequest
0 голосов
/ 04 мая 2020

У меня есть несколько вариантов для выбора, и я хотел бы установить некоторые текстовые входы на видимый или скрытый в зависимости от того, что выберет пользователь. У меня уже есть функциональность, но в этом случае мне нужно взять второе значение эха и проверить, равно ли оно чему-либо, в настоящее время я могу проверить только первое значение эха:

<select id="type_id" name="device_type_id" onchange="if (this.value==''){this.form['device_imei_textinput'].style.visibility='hidden'}else{this.form['device_imei_textinput'].style.visibility='visible'};">
   <option value='Select'>Select</option>
   <?php foreach ($result as $row) { ?>
     <option value="<?php echo $row['id'] . $row['serial_or_imei'] ?>"> <?php echo $row['name']; ?> </option>;
   <?php } ?>
</select>

Итак, Мне нужно получить ТОЛЬКО значение $row['serial_or_imei'] и сравнить onchange="if (this.value==''), как я могу это сделать?

РЕДАКТИРОВАТЬ: дальнейшее объяснение

Мне нужно прочитать значение $row['serial_or_imei'], которое может быть пустым, 'serial' ИЛИ ​​'imei', поэтому один из этих трех. PS: я должен сохранить $row['id'] в атрибуте value, потому что позже я передаю это значение на сервер, поэтому не советуем удалять его.

Ответы [ 5 ]

2 голосов
/ 04 мая 2020

Вы можете сравнить значение массива в onchange, присвоив значение переменной, которая будет довольно аккуратным форматом, как

<?php $value = echo $row['serial_or_imei']; ?>
<select id="type_id" name="device_type_id" onchange="if (this.value=='<?php empty($value)?>'){this.form['device_imei_textinput'].style.visibility='hidden'}else{this.form['device_imei_textinput'].style.visibility='visible'};">
   <option value='Select'>Select</option>
   <?php foreach ($result as $row) { ?>
     <option value="<?php echo $row['id'] . $row['serial_or_imei'] ?>"> <?php echo $row['name']; ?> </option>;
   <?php } ?>
</select>
2 голосов
/ 04 мая 2020

Вы можете добавить one attribute к option element и протестировать его. что-то вроде

<select id="type_id" name="device_type_id" onchange="if (this.getAttribute('data')==''){this.form['device_imei_textinput'].style.visibility='hidden'}else{this.form['device_imei_textinput'].style.visibility='visible'};">
   <option value='Select'>Select</option>
   <?php foreach ($result as $row) { ?>
     <option data="<?php echo $row['serial_or_imei'] ?>" value="<?php echo $row['id'] . $row['serial_or_imei'] ?>"> <?php echo $row['name']; ?> </option>;
   <?php } ?>
</select>
2 голосов
/ 04 мая 2020

Вы добавляете новый пользовательский атрибут serial и задаете для него значение serial_or_imei, а затем сравниваете в javascript с onchange="if (this.value=='')

<select id="type_id" name="device_type_id" onchange="if (this.value==''){this.form['device_imei_textinput'].style.visibility='hidden'}else{this.form['device_imei_textinput'].style.visibility='visible'};">
    <option value='Select'>Select</option>
    <?php foreach ($result as $row) { ?>
    <option value="<?php echo $row['id'] . $row['serial_or_imei'] ?>" data-serial="<?php echo $row['serial_or_imei'] ?>"> <?php echo $row['name']; ?> </option>;
    <?php } ?>
</select>

РЕДАКТИРОВАТЬ: атрибут «serial» не является допускается в элементе «option». Изменил это на data-seial.

0 голосов
/ 04 мая 2020

Основываясь на информации из комментариев, я думаю, что это решение - то, что вы ищете. Обратите внимание, я перемещаю onchange в функцию для ясности.

Вы видите, что опция «три» скрывает ввод текста, так как у него нет imei.

Также обратите внимание на то, как я использую атрибут data- внутри вашего параметра, чтобы вы также могли получать эту информацию независимо от параметра id. Также обратите внимание, что this.form['device_imei_textinput'] не сработало. Требуется ссылка elements.

function check_imei(obj, form) {
    var imei = obj.options[obj.selectedIndex].getAttribute('data-imei');

    if (imei == '') {
        form.elements.device_imei_textinput.style.visibility='hidden';
    } else {
        form.elements.device_imei_textinput.style.visibility='visible';
    }  
}
<form>
    <select id="type_id" name="device_type_id" onchange="check_imei(this, this.form);">
        <option value='Select'>Select</option>
        <option value="1" data-imei="foo">One</option>
        <option value="2" data-imei="bar">Two</option>
        <option value="3" data-imei="">Three</option>
    </select>

    <input type="text" id="device_imei_textinput" name="device_imei_textinput" />
</form>

Пример зеркала: https://jsfiddle.net/asp1hewx/

РЕДАКТИРОВАТЬ : Для адресации PHP сторона вещей, форма выше может быть сгенерирована с помощью:

<form>
    <select id="type_id" name="device_type_id" onchange="check_imei(this, this.form);">
        <option value='Select'>Select</option>
        <?php foreach ($result as $row) { ?>
            <option value="<?php echo $row['id'] . $row['serial_or_imei'] ?>" data-imei="<?php $row['serial_or_imei'] ?>"><?php echo $row['name'] ?></option>
        <?php } ?>
    </select>

    <input type="text" id="device_imei_textinput" name="device_imei_textinput" />
</form>
0 голосов
/ 04 мая 2020

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

<?php foreach ($result as $row) { ?>
    <input type="hidden" name="map[<?php echo $row['id']; ?>]" value="<?php echo $row['serial_or_imei']; ?>">
<? } ?>

Вот полный автономный скрипт, чтобы проиллюстрировать это:

<?php

$random_serial_or_imei = range(1000, 9999);
shuffle($random_serial_or_imei);

$result = [];
for ($i = 0; $i < 5; $i++) {
    $result[] = [
        'id' => $i,
        'serial_or_imei' => $random_serial_or_imei[$i],
        'name' => "Name #$i",
    ];
}

?>
<select name="device_type_id">
    <option value="">Select</option>
    <?php foreach ($result as $row) { ?>
        <option value="<?php echo $row['id']?>"><?php echo $row['name']; ?></option>
    <?php } ?>
</select>

<?php foreach ($result as $row) { ?>
    <input type="hidden" name="map[<?php echo $row['id']; ?>]" value="<?php echo $row['serial_or_imei']; ?>">
<? } ?>

Это печатает что-то вроде:

<select name="device_type_id">
    <option value="">Select</option>
            <option value="0">Name #0</option>
            <option value="1">Name #1</option>
            <option value="2">Name #2</option>
            <option value="3">Name #3</option>
            <option value="4">Name #4</option>
    </select>

    <input type="hidden" name="map[0]" value="9513">
    <input type="hidden" name="map[1]" value="3931">
    <input type="hidden" name="map[2]" value="3971">
    <input type="hidden" name="map[3]" value="4476">
    <input type="hidden" name="map[4]" value="6429">

Выбранный тип можно найти в $_POST['device_type_id'] и соответствующий IMEI в $_POST['map'][ $_POST['device_type_id'] ].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...