Откройте URL в новой вкладке (а не в новом окне), используя JavaScript

Итак, я собираюсь немного глубже понять, почему это не работает, потому что я такой человек, который не может спать по ночам, не зная ха-ха. Я использую jQuery validate 1.10 и Microsoft jQuery Unobtrusive Validation 2.0.20710.0, который был опубликован в 1/29/2013.

Я начал с поиска метода setDefaults в jQuery Validate и нашел его в строке 261 unminified file. Вся эта функция действительно объединяет ваши настройки json в существующие $.validator.defaults, которые инициализируются с использованием свойства ignore, которое установлено как «: hidden», а также другие значения по умолчанию, определенные в jQuery Validate. Поэтому в этот момент мы переопределили игнорирование. Теперь давайте посмотрим, на что ссылается это свойство по умолчанию.

Когда я прорисовывал код, чтобы увидеть, где ссылается $.validator.defaults. Я заметил, что это используется только конструктором для валидатора формы, строка 170 в jQuery проверяет unminified файл.

// constructor for validator
$.validator = function( options, form ) {
    this.settings = $.extend( true, {}, $.validator.defaults, options );
    this.currentForm = form;
    this.init();
};

На этом этапе валидатор объединит все установленные по умолчанию настройки, которые были установлены и прикреплены к валидатору формы. Когда вы смотрите на код, который выполняет проверку, подсветку, подсвечивание и т. Д., Все они используют объект validator.settings, чтобы вытащить свойство ignore. Поэтому нам нужно убедиться, что мы должны установить игнорирование с помощью метода setDefaults, тогда он должен произойти до $ («form»). Вызывается функция validate ().

Если вы используете Asp .net MVC и ненавязчивый плагин, тогда вы поймете, посмотрев на javascript, который validate вызывается в документе .ready. Я также назвал свои setDefaults в блоке document.ready, который будет выполняться после скриптов, jquery проверяет и ненавязчив, потому что я определил эти сценарии в html перед тем, у кого есть вызов в нем. Таким образом, мой вызов, очевидно, не повлиял на функциональность по умолчанию пропуска скрытых элементов во время проверки. Здесь есть пара вариантов.

Вариант 1 - Вы могли бы, как указал Хуан Мелладо, вызвать вызов за пределами документа. Уже выполнив его, как только скрипт будет загружен. Я не уверен в сроках этого, так как браузеры теперь могут выполнять параллельную загрузку скрипта. Если я просто буду осторожен, то, пожалуйста, поправьте меня. Кроме того, возможно, есть способы обойти это, но для моих нужд я не пошел по этому пути.

Вариант 2a - Безопасная ставка в моих глазах - просто заменить $.validator.setDefaults({ ignore: '' }); внутри события document.ready с $("form").data("validator").settings.ignore = "";. Это изменит свойство ignore, которое фактически используется проверкой jQuery при выполнении каждой проверки на ваших элементах для данной формы.

Параметры 2b - После просмотра кода немного больше вы также можете использовать $("form").validate().settings.ignore = ""; как способ установки свойства ignore. Причина в том, что при просмотре функции validate он проверяет, был ли объект-валидатор уже сохранен для элемента формы с помощью функции $.data(). Если он находит объект валидатора, хранящийся в элементе формы, он просто возвращает объект validator вместо создания другого.

1846
задан nyedidikeke 7 May 2019 в 19:07
поделиться

1 ответ

function openTab(url) {
  const link = document.createElement('a');
  link.href = url;
  link.target = '_blank';
  document.body.appendChild(link);
  link.click();
  link.remove();
}
6
ответ дан 22 November 2019 в 20:02
поделиться
Другие вопросы по тегам:

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