Почему текст div автоматически возвращается к оригиналу после настройки с помощью JavaScript через innerHTML? [Дубликат]

Расширение решений, которые были предложены до сих пор, заключается в том, что неявные соединения FTPS требуют, чтобы сокет был автоматически подключен к ssl, прежде чем мы получим возможность вызвать login (). Многие подклассы, предлагаемые людьми, делают это в контексте метода connect, мы можем в более общем плане управлять этим, изменяя get / set self.sock с помощью свойства автоматического обертывания в наборе:

import ftplib
import ssl

class ImplicitFTP_TLS(ftplib.FTP_TLS):
    """FTP_TLS subclass that automatically wraps sockets in SSL to support implicit FTPS."""

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self._sock = None

    @property
    def sock(self):
        """Return the socket."""
        return self._sock

    @sock.setter
    def sock(self, value):
        """When modifying the socket, ensure that it is ssl wrapped."""
        if value is not None and not isinstance(value, ssl.SSLSocket):
            value = self.context.wrap_socket(value)
        self._sock = value

Использование по существу такое же, как со стандартным классом FTP_TLS:

ftp_client = ImplicitFTP_TLS()
ftp_client.connect(host='ftp.example.com', port=990)
ftp_client.login(user='USERNAME', passwd='PASSWORD')
ftp_client.prot_p()
712
задан Nadia Alramli 31 May 2009 в 20:19
поделиться

16 ответов

Я уверен, что на FF функция

removeItem 

встречается с ошибкой JavaScript, это не произошло в IE

. При ошибке javascript появляется «return false» code won ' t run, делая страницу обратной почтой

7
ответ дан Alin Vasile 19 August 2018 в 08:18
поделиться

Вы можете просто получить ссылку на свои кнопки с помощью jQuery и предотвратить ее распространение, как показано ниже:

 $(document).ready(function () {
    $('#BUTTON_ID').click(function(e) {

            e.preventDefault();
            e.stopPropagation();
            e.stopImmediatePropagation();

            return false;
    });});
3
ответ дан Ata Iravani 19 August 2018 в 08:18
поделиться
  • 1
    e.preventDefault(); e.stopPropagation(); достаточно для работы. e.stopImmediatePropagation() это порождает ошибку неопределенного метода в Chrome. – Subroto 3 June 2018 в 20:20

Вот простой подход:

$('.mybutton').click(function(){

    /* Perform some button action ... */
    alert("I don't like it when you press my button!");

    /* Then, the most important part ... */
    return false;

});
3
ответ дан axiom82 19 August 2018 в 08:18
поделиться
return false;

Вы можете вернуть false в конце функции или после вызова функции.

До тех пор, пока это последнее, что происходит, форма не будет отправлена.

2
ответ дан Knickerless-Noggins 19 August 2018 в 08:18
поделиться

Когда-то мне было нужно что-то очень похожее ... и я получил его.

Итак, что я здесь делаю, так это то, как я делаю трюки, чтобы иметь форму, которая может быть отправлена ​​JavaScript без какой-либо проверки и выполнить проверку, только когда пользователь нажимает кнопку (обычно кнопку отправки).

В этом примере я буду использовать минимальную форму, только с двумя полями и кнопкой отправки.

Запомнить что нужно: из JavaScript он должен быть представлен без проверки. Однако, если пользователь нажимает такую ​​кнопку, валидация должна быть выполнена, а форма отправлена, только если пройдет проверку.

Обычно все начиналось бы с чего-то рядом с этим (я удалял все лишние вещи неважно):

<form method="post" id="theFormID" name="theFormID" action="">
   <input type="text" id="Field1" name="Field1" />
   <input type="text" id="Field2" name="Field2" />
   <input type="submit" value="Send" onclick="JavaScript:return Validator();" />
</form>

Посмотрите, как тег формы не имеет onsubmit="..." (помните, что это было условие не иметь его).

Проблема в том, что форма всегда отправляется, независимо от того, onclick возвращает true или false.

Если я изменяю type="submit" для type="button", он работает, но не работает. Он никогда не отправляет форму, но это можно сделать легко.

Итак, я использовал это:

<form method="post" id="theFormID" name="theFormID" action="">
   <input type="text" id="Field1" name="Field1" />
   <input type="text" id="Field2" name="Field2" />
   <input type="button" value="Send" onclick="JavaScript:return Validator();" />
</form>

И на function Validator, где return True; есть, я также добавьте предложение для отправки JavaScript, что-то похожее на это:

function Validator(){
   //  ...bla bla bla... the checks
   if(                              ){
      document.getElementById('theFormID').submit();
      return(true);
   }else{
      return(false);
   }
}

id="" предназначен только для JavaScript getElementById, name="" предназначен только для того, чтобы он отображался в данных POST.

Таким образом, он работает так, как мне нужно.

Я помещал это только для людей, которые не нуждаются в функции onsubmit в форме, но делают некоторые проверки, когда кнопка нажата пользователем.

Почему мне не нужна onsubmit в теге формы? Легко, на других частях JavaScript мне нужно выполнить отправку, но я не хочу, чтобы там была какая-либо проверка.

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

Это может показаться странным, но не тогда, когда вы думаете, например: в Login ... с некоторыми ограничениями. .. как будто не разрешено использовать сеансы PHP и ни куки не разрешены!

Поэтому любая ссылка должна быть преобразована в такую ​​форму submit, поэтому данные входа не будут потеряны. Когда логин еще не сделан, он также должен работать. Поэтому никакие проверки не должны выполняться по ссылкам. Но я хочу представить сообщение пользователю, если пользователь не ввел оба поля, пользователь и пароль. Так что, если его нет, форма не должна быть отправлена! есть проблема.

См. проблему: форма не должна отправляться, когда одно поле пуст, только если пользователь нажал кнопку, если это код JavaScript, он должен быть отправлен.

Если я выполняю работу над onsubmit в теге формы, мне нужно будет знать, является ли это пользователем или другим JavaScript. Поскольку никакие параметры не могут быть переданы, это невозможно напрямую, поэтому некоторые люди добавляют переменную, чтобы указать, нужно ли делать валидацию или нет. Первое, что нужно проверить, это проверить значение переменной и т. Д. Слишком сложно, и код не говорит, что действительно нужно.

Таким образом, решение не должно иметь onsubmit в теге формы. Insead поместите его там, где это действительно необходимо, на кнопку.

Для другой стороны, зачем вводить код onsubmit, так как концептуально я не хочу, чтобы он был подтвержден. Мне действительно нужна проверка кнопок.

Не только код более понятен, но и там, где он должен быть. Просто запомните это: - Я не хочу, чтобы JavaScript проверял форму (которая всегда должна выполняться PHP на стороне сервера). Я хочу показать пользователю сообщение о том, что все поля не должны быть пустыми, для чего нужен JavaScript (клиент сторона)

Итак, почему некоторые люди (подумайте или скажите), это должно быть сделано при проверке onsumbit? Нет, концептуально я не делаю проверку onsumbit на стороне клиента. Я просто что-то нажимаю на кнопку, поэтому почему бы просто не позволить этому быть реализованным?

Хорошо, что код и стиль отлично подходят. На любом JavaScript, который мне нужно отправить, я просто поставил:

document.getElementById('theFormID').action='./GoToThisPage.php'; // Where to go
document.getElementById('theFormID').submit(); // Send POST data and go there

И это пропускает проверку, когда мне это не нужно. Он просто отправляет форму и загружает другую страницу и т. Д.

Но если пользователь нажимает кнопку отправки (иначе type="button" не type="submit"), проверка выполняется до того, как отправить форму и если не действителен, не отправлен.

Надеюсь, это поможет другим не пробовать длинный и сложный код. Просто не используйте onsubmit, если это не нужно, и используйте onclick. Но просто не забудьте изменить type="submit" на type="button" и, пожалуйста, не забудьте сделать submit() с помощью JavaScript.

27
ответ дан Leigh 19 August 2018 в 08:18
поделиться

Вы используете элемент кнопки HTML5. Помните, что причина в том, что эта кнопка имеет поведение по умолчанию для submit, как указано в спецификации W3, как показано здесь: Кнопка W3C HTML5

Поэтому вам нужно явно указать его тип:

<button type="button">Button</button>

, чтобы переопределить тип отправки по умолчанию. Я просто хочу указать, почему это происходит =)

=)

1281
ответ дан Metafaniel 19 August 2018 в 08:18
поделиться
  • 1
    @DominorNovus Я рад, что мой ответ был полезен =) Я страдал до тех пор, пока не прочитал спецификацию, и я все понял;) – Metafaniel 24 September 2012 в 15:28
  • 2
    Это правильный правильный ответ. – jack 9 August 2013 в 12:49
  • 3
    спасло меня в подобной ситуации, так много для решения – pelican_george 3 May 2014 в 22:47
  • 4
    Это должен быть выбранный ответ, поскольку в нем нет javascript. Если вы хотите, чтобы ваша форма работала, когда js отключен, это то, что вам нужно. – opdb 18 September 2015 в 18:21
  • 5
    Кашель кашель .... это ответ. – dudewad 27 October 2015 в 23:49

Я согласен с Shog9, хотя вместо этого я мог бы использовать:

<input type = "button" onClick="addItem(); return false;" value="Add Item" />

Согласно w3schools , тег <button> имеет разное поведение в разных браузерах.

22
ответ дан poundifdef 19 August 2018 в 08:18
поделиться

Это ошибка html5, как было сказано, вы все равно можете использовать кнопку в качестве отправки (если вы хотите обойти оба пользователя javascript и не javascript), используя его, например:

     <button type="submit" onclick="return false"> Register </button>

вы отмените отправку, но по-прежнему выполняете все, что вы делаете в jquery или javascript function`s, и отправляете для пользователей, у которых нет javascript.

9
ответ дан sagits 19 August 2018 в 08:18
поделиться

$("form").submit(function () { return false; });, который предотвратит отправку кнопки, или вы можете просто изменить тип кнопки на «кнопку» <input type="button"/> вместо <input type="submit"/>. Это будет работать, только если эта кнопка не является единственной кнопкой в ​​этой форме.

13
ответ дан Shiala 19 August 2018 в 08:18
поделиться
  • 1
    Это для jQuery, эквивалент в Javascript: myform.onsubmit = function () {return false} ... также, даже если вы удалите кнопку отправки, форму можно также отправить, нажав клавишу ввода из другого поля формы. – Synexis 10 January 2013 в 23:13

Установите тип на ваших кнопках:

<button type="button" onclick="addItem(); return false;">Add Item</button>
<button type="button" onclick="removeItem(); return false;">Remove Last Item</button>

..., который не позволит им инициировать действие отправки, когда в обработчике события возникает исключение. Затем исправьте функцию removeItem(), чтобы она не вызывала исключение:

function removeItem() {
  var rows = $('form tr');
  if ( rows.length > 2 ) {
    // change: work on filtered jQuery object
    rows.filter(":last").html('');
    $('form :hidden:last').val('');
  } else {
    alert('Cannot remove any more rows');
  }
}

Обратите внимание на изменение: исходный код извлек элемент HTML из набора jQuery, а затем попытался вызвать jQuery на нем - это заставило исключение, в результате получилось поведение по умолчанию для кнопки.

FWIW, есть еще один способ, которым вы могли бы пойти с этим ... Подключите обработчики событий, используя jQuery, и используйте preventDefault () в объекте jQuery event , чтобы отменить начальное поведение по умолчанию:

$(function() // execute once the DOM has loaded
{

  // wire up Add Item button click event
  $("#AddItem").click(function(event)
  {
    event.preventDefault(); // cancel default behavior

    //... rest of add logic
  });

  // wire up Remove Last Item button click event
  $("RemoveLastItem").click(function(event)
  {
    event.preventDefault(); // cancel default behavior

    //... rest of remove last logic
  });

});

...

<button type="button" id="AddItem" name="AddItem">Add Item</button>
<button type="button" id="RemoveLastItem" name="RemoveLastItem">Remove Last Item</button>

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

555
ответ дан Shog9 19 August 2018 в 08:18
поделиться
  • 1
    типа = & Quot; кнопка & Quot; не всегда работает в Firefox для меня. Если js достаточно сложно, и есть ошибка, то Firefox все равно представит форму. Безумие! – Matthew Lock 12 October 2012 в 11:08
  • 2
    @MatthewLock: Вряд ли - ошибка в скрипте просто отключает этот блок кода, и действие продолжается, как обычно. Попробуйте вызвать методы события jQuery e.preventDefault () и / или e.stopPropgation () в качестве первых строк метода. См. stackoverflow.com/questions/2017755/… , чтобы узнать больше – brichins 17 April 2013 в 22:13
  • 3
    кнопка type = никогда не должна отправлять форму, несмотря на то, что – Matthew Lock 18 April 2013 в 02:37
  • 4
    return false так важно. иногда даже используйте его для кнопки отправки (onclick) – Jamie 9 March 2014 в 06:00
  • 5
    Я думаю, что html здесь странный. Он должен быть type = "button & quot; по умолчанию, не отправляя. Мне всегда было неожиданно видеть, что это по умолчанию. Это исключение. – httpete 14 January 2015 в 21:50

Предположим, что ваша форма HTML имеет id="form_id"

<form id="form_id">
<!--your HTML code-->
</form>

Добавьте этот фрагмент jQuery в ваш код, чтобы увидеть результат,

$("#form_id").submit(function(){
  return false;
});
17
ответ дан SlickRemix 19 August 2018 в 08:18
поделиться

Следующий пример кода показывает, как предотвратить нажатие кнопки на отправке формы.

Вы можете попробовать мой пример кода:

 <form autocomplete="off" method="post" action="">
   <p>Title:
     <input type="text" />
   </p>
   <input type="button" onclick="addItem()" value="Add Item">
   <input type="button" onclick="removeItem()" value="Remove Last Item">
   <table>
     <th>Name</th>

     <tr>
       <td>
         <input type="text" id="input1" name="input1" />
       </td>
       <td>
         <input type="hidden" id="input2" name="input2" />
       </td>
     </tr>
   </table>
   <input id="submit" type="submit" name="submit" value="Submit">
 </form>
<script language="javascript">
function addItem() {
return false;
}

function removeItem() {
return false;
}
</script>
1
ответ дан The KNVB 19 August 2018 в 08:18
поделиться
  • 1
    Вы должны описать, что происходит и почему. – Soaku 19 March 2017 в 10:37

Я не могу проверить это прямо сейчас, но я думаю, вы могли бы использовать метод jQuery preventDefault .

0
ответ дан Tyler Rash 19 August 2018 в 08:18
поделиться
  • 1
    Tyler Rash - я пробовал этот метод, хотя, видимо, он не работает для кнопок. – Dominor Novus 23 September 2012 в 14:19

Установите свою кнопку обычным способом и используйте event.preventDefault, например ..

   <button onclick="myFunc(e)"> Remove </button>  
   ...
   ...

   In function...

   function myFunc(e){
       e.preventDefault();
   }
2
ответ дан Vishal 19 August 2018 в 08:18
поделиться

Функция removeItem фактически содержит ошибку, которая делает кнопку формы по умолчанию (представление формы). Консоль ошибки javascript обычно дает указатель в этом случае.

Проверьте функцию removeItem в части javascript:

Строка:

rows[rows.length-1].html('');

не работает. Попробуйте это вместо:

rows.eq(rows.length-1).html('');
0
ответ дан ylebre 19 August 2018 в 08:18
поделиться
0
ответ дан Sathish Thangaraj 30 October 2018 в 20:31
поделиться
Другие вопросы по тегам:

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