Проверка формы Jquery не работает после вставки DatePicker - PullRequest
8 голосов
/ 02 января 2011

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

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

После того, как я вставил jquery datepicker, проверка не работает, а datepicker работает нормально.

Может кто-нибудь, пожалуйста, дайте мне помощь?

<script src="js/prototype.js" type="text/javascript"></script>
<script src="js/validation.js" type="text/javascript"></script>
<script src="js/effects.js" type="text/javascript"></script>

<link rel="stylesheet" type="text/css" href="css/style.css" />

<script type="text/javascript" src="js/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.7.custom.min.js"></script>
<link type="text/css" href="css/start/jquery-ui-1.8.7.custom.css" rel="stylesheet" />
<script>
$(function() {
 $( "#datepicker" ).datepicker();
});
</script>


<form id="test" action="#" method="get">
<fieldset>
    <!--<legend>Form</legend>-->
    <div class="form-row">
        <div class="field-label">
          <label for="name-t2">*Your Name:</label>
          </div>
        <div class="field-widget"><input name="name-t2" id="name-t2" class="required" title="Enter your name" /></div>
    </div>
    <div class="form-row">
        <div class="field-label"><label for="email-t2">*Your Email:</label></div>
        <div class="field-widget"><input name="email-t2" id="email-t2" class="required validate-email" title="Enter a correct email. E.g. xx@example.com" /></div>
    </div>
    <div class="form-row">
        <div class="field-label"><label for="contact-t2">Contact Number:</label></div>
        <div class="field-widget"><input name="contact-t2" id="contact-t2" class="validate-digits" title="Enter your contact number" /></div>
    </div>
    <div class="form-row">
        <div class="field-label"><label for="datepicker">Departure Date:</label></div>
        <div class="field-label">
            <input id="datepicker" name="datepicker" class="required validate-date-au" type="text" />
        </div>
    </div>
    <div class="form-row">
        <div class="field-label"><label for="ppl-t2">Number of People:</label></div>
        <div class="field-label"><input name="ppl-t2" id="ppl-t2" class="validate-number" title="Optional: Enter number of people" /></div>
    </div>
    <div class="form-row">
        <div class="field-label"><label for="budget-t2">Your Budget:</label></div>
        <div class="field-widget">
            <select id="budget-t2" name="budget-t2" class="validate-selection" title="Choose your budget">
                <option>Select one...</option>
                <option>< $100</option>
                <option>$100 - $250</option>
                <option>$250 - $500</option>
                <option>$500 - $750</option>
                <option>$750 - $1,000</option>
                <option>> $1,000</option>
            </select>
        </div>
    </div>
    <div class="form-row">
        <div class="field-label"><label for="enquiry-t2">Special Enquiry:</label></div>
        <div class="field-label">
         <input type="checkbox" name="enquiry-t2" id="enquiry-travel" value="Travel" />Travel<br>
            <input type="checkbox" name="enquiry-t2" id="enquiry-accommadation" value="Accommodation"  />Accommodation<br>
            <input type="checkbox" name="enquiry-t2" id="enquiry-flight" value="Flight Ticket"  />Flight Ticket<br>
            <input type="checkbox" name="enquiry-t2" id="enquiry-other" value="Others" class="validate-one-required" />Others 
        </div>
    </div>

    <div class="form-row">
        <div class="field-label-textarea"><label for="comment-t2">Your Message:</label></div>
        <div class="field-label-textarea">
                <TEXTAREA NAME="comment-t2" id="comment-t2" class="required" cols=55 rows=10></TEXTAREA>
        </div>
    </div>

</fieldset>
<input type="submit" value="Submit" /> <input type="button" value="Reset" onClick="valid.reset(); return false" />
</form>

<script type="text/javascript">
 var valid2 = new Validation('test', {useTitles:true});
</script>

Ответы [ 8 ]

10 голосов
/ 03 февраля 2012

Проблема с вашим кодом в том, что ваша библиотека jquery и библиотеки прототипов конфликтуют.

Многие библиотеки JavaScript используют '$' в качестве имени функции или переменной, как это делает jQuery. Здесь библиотеки jquery и prototype конфликтуют из-за '$'. В случае jQuery '$' - это просто псевдоним для 'jQuery'. Чтобы исправить это, добавьте jquery в режиме без конфликтов.

jQuery.noConflict();

Включите весь ваш код jquery, как показано ниже:

(function($) {    

     //jquery code goes here.    

})(jQuery);

См. Полный код:

<script type="text/javascript">

jQuery.noConflict();

(function($) {  
          $("#datepicker").datepicker();
})(jQuery);

</script>

Приведенная выше процедура гарантирует, что jquery не конфликтует с вашей другой библиотекой, т. Е. Прототипом в этом случае.

6 голосов
/ 02 января 2011

JQuery и Prototype могут конфликтовать через '$'.

Попробуйте:

<script type="text/javascript">
         var $j = jQuery.noConflict()
         $j(function() {
              $j("#datepicker").datepicker();
          });
</script>
4 голосов
/ 24 февраля 2011

После того, как я вставлю приведенный ниже код в мою функцию выбора даты, datepicker формат не работает, и проверка JQuery работает нормально:

<script type="text/javascript">
     var $j = jQuery.noConflict()
     $j(function() {
          $j("#datepicker").datepicker();
      });
</script>
2 голосов
/ 02 февраля 2012

Сначала загрузите JQuery, затем поместите его в пространство имен, затем загрузите Prototype.Как отмечали другие, вы используете JQuery для пространства имен с функцией noConflict :

<link rel="stylesheet" type="text/css" href="css/style.css" />

<script type="text/javascript" src="js/jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="js/jquery-ui-1.8.7.custom.min.js"></script>
<link type="text/css" href="css/start/jquery-ui-1.8.7.custom.css" rel="stylesheet" />

<script type="text/javascript">
 var myJQ = JQuery.noConflict();
</script>

<!-- now load Prototype -->
<script src="js/prototype.js" type="text/javascript"></script>
<script src="js/validation.js" type="text/javascript"></script>
<script src="js/effects.js" type="text/javascript"></script>

<!-- now you can't use $ anymore for JQuery, but you can use 'myJQ' -->
<script>
myJQ(function() {
 myJQ( "#datepicker" ).datepicker();
});
</script>

Не тестировал его, но он должен работать таким образом ... удачи

1 голос
/ 08 февраля 2012

Вам просто нужно сделать запрос Post, а не Get запрос. Когда вы используете Форму, вы хотите отправить Данные из Формы на Сервер, который может обрабатывать Данные, и, следовательно, он должен быть POST and not Get. Я полагаю, что это единственное изменение, которое вам нужно сделать, чтобы сделать ваши проверки Работа. Проверьте это JsFiddle Out: Решение

1 голос
/ 05 февраля 2012

Я пролистал ответы здесь и согласен с остальными, необходим jQuery.noConflict ().Похоже, вы используете прототип и jquery.Которые имеют противоречивый синтаксис.Поскольку вы вызываете jQuery после того, как вы вызываете prototype, ваш в некотором смысле перезаписывает прототип с помощью jquery.

Принимая из ответа Дипали .. если вы используете это

<script type="text/javascript">
 var $j = jQuery.noConflict()
 $j(function() {
      $j("#datepicker").datepicker();
  });

и замените это (из вашего исходного поста):

<script>
$(function() {
 $( "#datepicker" ).datepicker();
});
</script>

и прототип, и jquery будут работать в гармонии.Также обратите внимание, что любой другой jquery, который вы делаете на своей странице, будет требовать $ j перед ним, а не только $

1 голос
/ 02 февраля 2012

чтобы исправить это, я заменил мою реализацию jQuery datepicker на приведенную здесь http://keith -wood.name / uiDatepickerValidation.html

, который является просто расширением средства выбора даты jquery, но с дополнительной проверкой, которая отлично работает.

Отличная библиотека!

0 голосов
/ 31 мая 2016

просто добавьте onClose в DatePicker

$('#date').datepicker({
    onClose: function() {
        $(this).valid();
    }
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...