У меня есть простая форма, просто одно текстовое поле, содержащее письмо из базы данных MySQL. У пользователя есть 2 кнопки, одна из которых может полностью обновить электронное письмо тем, чем он его заменит, или он может вернуть электронное письмо в состояние по умолчанию, т.е. исходное электронное письмо. Все работает нормально, если у вас есть 2 кнопки сразу «на месте» с соответствующим текстовым полем. Но если вы поместите кнопку «сброс» в отдельную ячейку таблицы, функция «onlick» set-email-back-to-default перестает работать, и я не понимаю, как это исправить.

Это будет работать так, потому что кнопка сброса находится рядом с текстовым полем:

<input name="cc_email"  type="text"  value="<?php echo !empty($_SESSION["cc-email"]) ? $_SESSION["cc-email"] : $_SESSION['admin_username'];?>" />  
<input id="reset-cc" name="add" type="button" value="Set to default" />

Вот код JavaScript:

$(document).ready(function() {
    $('#reset-cc').click(function() {
        $(this).siblings('input[name="cc_email"]').val('<?php echo $_SESSION['admin_username'] ?>');
        $('#update_cc').submit();

        return false;
    });

Но если поместить кнопку сброса в отдельную ячейку таблицы следующим образом, функция перестает работать, как будто она больше не может получить доступ к текстовому полю:

<td>    
  <input name="cc_email" type="text"  value="<?php echo !empty($_SESSION["cc-email"]) ? $_SESSION["cc-email"] : $_SESSION['admin_username'];?>"   />  
</td>
<td>
  <input id="reset-cc" name="add" type="button" value="Set to default" />
</td>

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

1
Robert Sheppard 18 Дек 2015 в 19:33

3 ответа

Лучший ответ

Ваша проблема здесь:

$(this).siblings('input[name="cc_email"]')

Перемещая кнопку ввода в другой TD, он больше не брат (как указали другие ответы). Вы можете просто присвоить кнопке идентификатор и ссылаться на нее следующим образом:

    //this bit |
    //         v
<input id="cc_email" name="cc_email" type="text"  value="<?php echo !empty($_SESSION["cc-email"]) ? $_SESSION["cc-email"] : $_SESSION['admin_username'];?>"   />
//...
$("#cc_email")...

Что будет проще, чем совершать замысловатые родительские звонки. Эта кнопка уникальна, не так ли?

2
Draco18s no longer trusts SE 18 Дек 2015 в 16:41

Если ввод всегда будет в том же tr, что и кнопка, найдите поле ввода в строке:

$('#reset-cc').click(function() {
  $(this).closest('tr').find('input[name="cc_email"]').val('original@example.com');
  $('#update_cc').submit();

  return false;
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<table>
  <tr>
    <td>
      <input name="cc_email" type="text" value="loaded@example.com" />
    </td>
    <td>
      <input id="reset-cc" name="add" type="button" value="Set to default" />
    </td>
  </tr>
</table>
0
Paul Roub 18 Дек 2015 в 16:40

Функция .siblings() выполняет поиск в коллекции братьев и сестер одного и того же родителя. Если вы положите их в разных родителей, то они не братья и сестры. Попробуйте заменить его на что-то вроде:

$(this).parent().prev().find('input[name="cc_email"]').val('<?php echo $_SESSION['admin_username'] ?>');
0
Makaze 18 Дек 2015 в 16:38