Поле с удаленным обязательным атрибутом продолжает проверяться после отправки

Похоже, вам нужно urlencode указать имя файла, когда вы вставляете его в URL-адрес, который вы создаете. За комментарий выше, не делая этого, вы нарушаете строку GET.

array(5) { 
  ["action"]=> string(6) "rename" 
  ["file_id"]=> string(5) "24086" 
  ["filename"]=> string(8) "Black " 
  ["White_pdf"]=> string(0) "" 
  ["assn_id"]=> string(2) "25" 
}

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

Этот код:

display_name; ?>

Должен выглядеть так:

display_name; ?>

После обработки запроса вам понадобится urldecode $_GET['filename'].

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

0
задан atila665 5 March 2019 в 18:24
поделиться

1 ответ

Я предложу вам другой подход здесь ...

Во-первых, для этого вам нужен только один обработчик, поскольку логика одинакова для обоих входов. Вы можете использовать более одного селектора ... Например: $('#password, #password2'). Но я бы вместо этого использовал класс ... Как $(".password"). Вам решать.

Во-вторых, я сказал «логика та же» ... То есть :

Если один из двух входов не пуст оба требуются.

Таким образом, наличие одинакового обработчика событий change на обоих входах означает, что вы не знаете, какой из них вызвал событие. Поэтому я предлагаю использовать цикл .each() здесь (чтобы убедиться, что вы проверяете все значения) ... и логический «флаг» (true / false).

После этого цикла используйте этот «флаг» , чтобы установить атрибут required.

& nbsp; & nbsp; & nbsp; Я использовал правило CSS, чтобы сделать результат очевидным в приведенном ниже фрагменте кода.

$('#password, #password2').change(function(){
  
  // Look up for the password inputs in that "row".
  var pass_inputs = $(this).closest(".row").find("[type='password']");
  
  // Flag to determine if at least one is not empty.
  var not_empty = false;
  
  // Loop throug the password inputs and change the flag.
  pass_inputs.each(function(){
    if($(this).val() != ''){
    not_empty = true
    }
  });
  
  // Use the flag as the boolean argument for the required attribute.
  pass_inputs.attr('required', not_empty);
});
[required]{
  border: 3px solid red;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<form id="edicionPerfilForm" action="actor/edit.do" method="post">
  <div class="row">
    <div class="form-group col-md-4">
      <div>
        <label for="password">Password</label>
        <input id="password" name="password" class="form-control" type="password" value="" oninvalid="this.setCustomValidity('Fill out this field')" oninput="this.setCustomValidity('')">
        <br>    
      </div>
    </div>
    <div class="form-group col-md-4">
      <div>
        <label for="password2">Repeat password</label>
        <input id="password2" name="password2" class="form-control" type="password" value="" oninvalid="this.setCustomValidity('Fill out this field')" oninput="this.setCustomValidity('')">    
      </div>
    </div>
  </div>
  <button name="save" type="submit" class="btn btn-dark">Send</button>
</form>

0
ответ дан Louys Patrice Bessette 5 March 2019 в 18:24
поделиться
Другие вопросы по тегам:

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