Как Вы устанавливаете свое объединение соединения?

Вам не нужно событие onclick для кнопки на странице 1, странице 2, странице 3.

удалить onclick="return page1()" вызывать функции

Просто используйте одно событие onclick, и оно должно работать, добавьте классы для проверки проверок, это то, что я сделал.

if ($(this).hasClass('page1')) {
      if (!page1()) {
        return;
      }
    }
    else if ($(this).hasClass('page2')) {
      if (!page2()) {
        return;
      }
    }
    else if ($(this).hasClass('page3')) {
      if (!page3()) {
        return;
      }
    }

function page1() {
  var name = document.forms["form1"]["name"].value
  var email = document.forms["form1"]["email"].value

  if (name == "" || !isNaN(name)) {
    alert("Please enter correct name");
    return false;
  }

  if (email.match(/^[\w\d._-]+@[\w\d.-]+\.[\w\d]{2,6}$/)) {

  } else {
    alert("Please enter correct email");
    return false;
  }
  return true;
}

function page2() {
  var phone = document.forms["form1"]["phone"].value
  var address = document.forms["form1"]["address"].value

  if (address == "" || !isNaN(address)) {
    alert("Please enter correct address");
    return false;
  }

  if (phone == "" || phone.length <= 9 || phone.length > 13 || isNaN(phone)) {
    alert("Please enter correct phone");
    return false;
  }

  return true;
}

function page3() {
  var password = document.forms["form1"]["password"].value
  var password2 = document.forms["form1"]["password"].value

  if (password.match(/((?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?=.*[@#$%]).{8,15})/)) {

  } else {
    alert("Please enter correct password");
    return false;
  }

  if (password1 != password2) {
    alert("Password and Re-enter Password was not same");
    return false;
  }

  return true;
}
$(document).ready(function() {
  $(".form-wrapper .button1").click(function() {
    if ($(this).hasClass('page1')) {
      if (!page1()) {
        return;
      }
    }
    else if ($(this).hasClass('page2')) {
      if (!page2()) {
        return;
      }
    }
    else if ($(this).hasClass('page3')) {
      if (!page3()) {
        return;
      }
    }
    $(this).closest("form1").find("input[type=text], input[type=password]").val("");
    var button = $(this);
    var currentSection = button.parents(".section");
    var currentSectionIndex = currentSection.index();
    var headerSection = $('.steps li').eq(currentSectionIndex);
    currentSection.removeClass("is-active").next().addClass("is-active");
    headerSection.removeClass("is-active").next().addClass("is-active");

    $(".form-wrapper").submit(function(e) {
      e.preventDefault();
      submit = $(this);
    });

    if (currentSectionIndex === 3) {
      $(document).find(".form-wrapper .section").first().addClass("is-active");
      $(document).find(".steps li").first().addClass("is-active");
    }
  });
});

$(document).ready(function() {
  $(".form-wrapper .button2").click(function() {
    var button = $(this);
    var currentSection = button.parents(".section");
    var currentSectionIndex = currentSection.index();
    var headerSection = $('.steps li').eq(currentSectionIndex);
    currentSection.removeClass("is-active").prev().addClass("is-active");
    headerSection.removeClass("is-active").prev().addClass("is-active");

    $(".form-wrapper").submit(function(e) {
      e.preventDefault();
      this.submit();
    });

    if (currentSectionIndex === 3) {
      $(document).find(".form-wrapper .section").first().addClass("is-active");
      $(document).find(".steps li").first().addClass("is-active");
    }
  });
});
html,
body {
  width: 100%;
  height: 100%;
  margin: 0;
  padding: 0;
  font-family: 'Open Sans', sans-serif;
  background-color: #fff;
}

h1,
h2,
h3,
h4,
h5,
h6 {
  color: #fff;
  font-weight: 200;
}

a {
  text-decoration: none;
}

p,
li,
a {
  font-size: 14px;
}

fieldset {
  margin: 0;
  padding: 0;
  border: none;
  color: #fff;
}


/* GRID */

.twelve {
  width: 100%;
}

.eleven {
  width: 91.53%;
}

.ten {
  width: 83.06%;
}

.nine {
  width: 74.6%;
}

.eight {
  width: 66.13%;
}

.seven {
  width: 57.66%;
}

.six {
  width: 49.2%;
}

.five {
  width: 40.73%;
}

.four {
  width: 32.26%;
}

.three {
  width: 23.8%;
}

.two {
  width: 15.33%;
}

.one {
  width: 6.866%;
}


/* COLUMNS */

.col {
  display: block;
  float: left;
  margin: 0 0 0 1.6%;
}

.col:first-of-type {
  margin-left: 0;
}

.container {
  width: 100%;
  max-width: 700px;
  margin: 0 auto;
  position: relative;
}

.row {
  padding: 20px 0;
}


/* CLEARFIX */

.cf:before,
.cf:after {
  content: " ";
  display: table;
}

.cf:after {
  clear: both;
}

.cf {
  *zoom: 1;
}

.wrapper {
  width: 100%;
  margin: 30px 0;
}


/* STEPS */

.steps {
  list-style-type: none;
  margin: 0;
  padding: 0;
  background-color: #000;
  text-align: center;
}

.steps li {
  display: inline-block;
  margin: 20px;
  color: #ccc;
  padding-bottom: 5px;
}

.steps li.is-active {
  border-bottom: 1px solid #fff;
  color: #fff;
}


/* FORM */

.form-wrapper .section {
  padding: 0px 20px 30px 20px;
  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
  background-color: #000;
  opacity: 0;
  -webkit-transform: scale(1, 0);
  -ms-transform: scale(1, 0);
  -o-transform: scale(1, 0);
  transform: scale(1, 0);
  -webkit-transform-origin: top center;
  -moz-transform-origin: top center;
  -ms-transform-origin: top center;
  -o-transform-origin: top center;
  transform-origin: top center;
  -webkit-transition: all 0.5s ease-in-out;
  -o-transition: all 0.5s ease-in-out;
  transition: all 0.5s ease-in-out;
  text-align: center;
  position: absolute;
  width: 100%;
  min-height: 300px
}

.form-wrapper .section h3 {
  margin-bottom: 30px;
}

.form-wrapper .section.is-active {
  opacity: 1;
  -webkit-transform: scale(1, 1);
  -ms-transform: scale(1, 1);
  -o-transform: scale(1, 1);
  transform: scale(1, 1);
}

.form-wrapper .button1,
.form-wrapper .submit {
  background-color: #fff;
  display: inline-block;
  padding: 8px 30px;
  color: #000;
  cursor: pointer;
  font-size: 14px !important;
  font-family: 'Open Sans', sans-serif !important;
  position: absolute;
  right: 20px;
  bottom: 20px;
}

.form-wrapper .button2 {
  background-color: #fff;
  display: inline-block;
  padding: 8px 30px;
  color: #000;
  cursor: pointer;
  font-size: 14px !important;
  font-family: 'Open Sans', sans-serif !important;
  position: absolute;
  left: 20px;
  bottom: 20px;
}

.form-wrapper .submit {
  border: none;
  outline: none;
  -webkit-box-sizing: content-box;
  -moz-box-sizing: content-box;
  box-sizing: content-box;
  -webkit-appearance: none;
  -moz-appearance: none;
  appearance: none;
}

.form-wrapper input[type="text"],
.form-wrapper input[type="password"] {
  display: block;
  padding: 10px;
  margin: 10px auto;
  background-color: #f1f1f1;
  border: none;
  width: 50%;
  outline: none;
  font-size: 14px !important;
  font-family: 'Open Sans', sans-serif !important;
}
<script src='https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.0/jquery.min.js'></script>

<div class="container">
  <div class="wrapper">
    <ul class="steps">
      <li class="is-active">Step 1</li>
      <li>Step 2</li>
      <li>Step 3</li>
    </ul>
    <form class="form-wrapper" id="form1" onsumbit="return submit1()">
      <fieldset class="section is-active">
        <h3>Your Details</h3>
        <input type="text" name="name" id="name" placeholder="Name">
        <input type="text" name="email" id="email" placeholder="Email">
        <input class="button1 page1" type="button" value="Next">
      </fieldset>
      <fieldset class="section">
        <h3>other Details</h3>
        <input type="text" name="phone" id="phone" placeholder="Phone">
        <input type="text" name="address" id="address" placeholder="address">
        <input class="button2" type="button" value="Previous">
        <input class="button1 page2" type="button" value="Next" onclick="return page2()">
      </fieldset>
      <fieldset class="section">
        <h3>Choose a Password</h3>
        <input type="password" name="password" id="password" placeholder="Password">
        <input type="password" name="password2" id="password2" placeholder="Re-enter Password">
        <input class="button2" type="button" value="Previous">
        <input class="submit button1 page3" type="submit" value="Sign Up" onclick="return page3()">
      </fieldset>
      <fieldset class="section">
        <h3>Account Created!</h3>
        <p>Your account has now been created.</p>

        <div class="button1">Reset Form</div>
      </fieldset>
    </form>
  </div>
</div>

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

10
задан WW. 13 July 2010 в 11:36
поделиться

6 ответов

Я записал пул соединения для базы данных в Java, когда это был просто шаблон разработки и не общая библиотека. Теперь я использую тот, встроенный в Tomcat.

Я использовал поток для контроля нескольких аспектов пула и нескольких параметров для управления его поведением...

  1. minimumInPool = "3"... Эти первые три создаются на запуск. Пулу никогда не позволяют опуститься ниже три.
  2. maximumIdleTimeBeforeRemoval = "60"... Если подключение неактивно в течение часа, то отбросьте его и создайте новое. Время простоя, вероятно, означает, что существует только минимум три в пуле.
  3. maximumInUseTimeBeforeRemoval = "30"... Если данное соединение проверялось больше 30 минут, то что-то, вероятно, неправильно. Вспомните это и уничтожьте соединение.
  4. maximumTimeBeforeRemoval = "60"... Удалите его, если это - более чем 60 старых минут.
  5. maximumUsageBeforeRemoval = "1000"... Удалите его, если это было проверено более чем 1 000 раз.
  6. monitorInterval = "15"... Проверяйте вышеупомянутые параметры каждые 15 минут.

Это служило мне очень хорошо в течение нескольких лет. Самыми высокими я когда-либо видел пул, было 151 соединение во время дикого быстрого взгляда. Обычно пул был приблизительно в дюжине во время тяжелого использования и бездействовал вниз к минимальным трем рано утренними часами.

Я использовал тонкие драйверы Oracle JDBC и соединился с базой данных Oracle.

6
ответ дан 3 December 2019 в 22:02
поделиться

Я соглашаюсь с матовым b, что мы не должны изобретать велосипед.

Однако использование палаты общин, DBCP является спорным на основе ответов этого и это подвергает сомнению. Существуют лучшие альтернативы, упомянутые там как c3po или proxool.

Или можно использовать rdbms зависимый механизм организации пула подключений.

2
ответ дан 3 December 2019 в 22:02
поделиться

Вот объяснение, которое я использовал для недавней реализации.

  1. Имейте два вида соединений в Вашем объединении соединения. Первое готово, означая открытый, но не используемое клиентом. Второе активно, означая используемый клиентом.

  2. Имейте свою организацию пула подключений, поддерживают небольшое количество готовых соединений, минимума N и максимума M. N может быть скорректирован в зависимости от максимальной скорости, в которой Ваши клиенты запрашивают соединения. Если количество готовых соединений когда-нибудь опускается до нуля, Вам нужен больший N. Если число последовательно высоко (скажите выше 10), Вам нужен более низкий N.

  3. Когда клиент хочет соединение, дайте им один из готовых (делающий его активный), затем сразу откройте новое, если существует теперь менее, чем N готовый (но не заставляйте клиент ожидать этого для завершения, или Вы потеряете преимущество объединения). Это гарантирует, что всегда будет, по крайней мере, N готовыми соединениями. Если ни один не готов, когда клиент хочет один, они должны будут ожидать вокруг, в то время как Вы создаете новый.

  4. Когда клиент заканчивает с активным соединением, возвратите его состоянию готовности, если существуют меньше, чем готовые соединения M. В других отношениях близко это. Это препятствует тому, чтобы Вы имели больше, чем готовые соединения M.

  5. Периодически перерабатывайте готовые соединения для предотвращения устаревших соединений. Если существуют больше, чем готовые соединения N, просто закройте самое старое соединение. В других отношениях близко это и вновь открыло другого.

Это имеет преимущество имения в наличии достаточных готовых и юных соединений в Вашем объединении соединения, не перегружая сервер.

3
ответ дан 3 December 2019 в 22:02
поделиться

Джакартский DBCP палаты общин уже делает весь материал, который Вы перечислили:

  • это создает соединения по мере необходимости и управляет ими в пуле
  • это может закрыть соединения, если они не использовались в течение определенного промежутка времени
  • это может выполнить запрос на соединении перед раздачей его, и если существует ошибка, соединение выброшено, и создается новый. Соединения могут также быть протестированы периодически, в то время как неактивный.
  • можно установить предел для соединений, которые будут созданы и также для минимального количества соединений, чтобы иметь готовый. Предел, конечно, во многом зависит от Вашего приложения.
  • Я не знаю, как, но DBCP знает, когда соединение не закрывается и закрывает ее для Вас, выдавая исключение так, чтобы Вы знали то, что произошло, когда Вы видите свой журнал.
  • DBCP имеет параметр тайм-аута, который очень полезен. Если все соединения в пуле будут использоваться, то он будет ожидать в течение того промежутка времени соединения, которое будет возвращено к пулу и если нет никого доступного, когда предел достигнут, Вы получаете ошибку.

Можно точно настроить объединение путем проигрывания с минимальным количеством соединений, макс. количеством соединений, которые будут созданы, и тайм-аут. Более долгий тайм-аут позволит Вам иметь нижний предел соединений, в то время как более короткий тайм-аут будет, вероятно, потребовал большего числа. Это зависит в большой степени от того, что делает Ваше приложение и как оно использует соединения.

2
ответ дан 3 December 2019 в 22:02
поделиться

Почему изобретают велосипед?

Кто-то уже, вероятно, решил проблему, и лучше.

Если Вы находитесь в мире Java, можно использовать палату общин DBCP.

1
ответ дан 3 December 2019 в 22:02
поделиться

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

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

Прежде чем я отвечу на соединение, открытый и близкий вопрос позволил мне сказать, что кэширование действительно важно. Вытаскивание объекта из кэша собирается сохранить Вас тонна времени. В некоторых моих приложениях asp.net, когда кэширование идет в dev, я нашел, что могу едва измерить задержку, тогда как с вызовом DB это могло бы взять где угодно от 15 мс до 45 мс для завершения вызова, и это даже не рассматривает других факторов задержки или загрузки. Другой метод, который я использую, является хорошей структурой объекта для моих данных так, чтобы я только сделал обновление DB, если что-то изменяется. Я реализовал некоторые методы на своем объекте o, удостоверяются, что у меня есть выполнение как можно меньше IO.

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

  1. Сохраните двери и окна закрытыми, чтобы экономить на энергии. Открытое соединение в одном месте означает, что это не доступно в другом (или память, и другие ресурсы более ограничены). Мы выключили объединение, потому что оно привело к лучшей производительности для нас.

  2. Я делаю столько в пакете или сразу сколько я могу, когда соединение открыто. Это немного более сложно, таким образом позвольте мне объяснить.

    • один метод, который я использовал, должен передать мои объекты соединения вниз канал так, чтобы все объекты могли использовать один объект соединения. Это приводит к одному соединению, являющемуся открытым и закрытым вместо, возможно, 10 или больше в зависимости от Вашего приложения. Хорошим примером этого является одна из наших покупательных моделей, которая использует в своих интересах питание SQL-сервера для сбора статистики и долго обсуждения, сложного, заказывая шаблоны. Не имеет смысла продолжать открывать и закрывать соединение при создании 200K + поиск DB или независимо от того, что приложения для. Другая часть к этому - то, что, когда я использую объект, я пытаюсь связать свои обновления для сокращения времени, когда я сохраняю соединение открытым. Так выполнение scope_identity на вызове вставки позволяет нам меня, заботятся и о моей вставке и о поиске для уникального идентификатора для добавления к моему объекту прежде, чем кэшировать его. Назад в день, когда я сначала разрабатывал приложения asp, я на самом деле открою соединение, как только страница начала загружать и затем закрывать его после. Я не рекомендую делать это больше. Теперь день там является большим преимуществом для этих видов абстракций и слоев, что я рекомендовал бы, чтобы любой программист новичка взял внимательное отношение к.

Мои два цента:

Кэшируйте свои данные! Кэшируйте свои данные! Кэшируйте свои данные! Сделайте как можно меньше доступа DB, когда Вы не сможете кэшировать и затем кэшировать свои данные!

2
ответ дан 3 December 2019 в 22:02
поделиться
Другие вопросы по тегам:

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