插入日期选择器后 Jquery 表单验证不起作用

Posted

技术标签:

【中文标题】插入日期选择器后 Jquery 表单验证不起作用【英文标题】:Jquery form validation not working after insert datepicker 【发布时间】:2011-06-02 12:38:27 【问题描述】:

我想创建一个包含日期选择器文本字段、姓名、联系人和 bla bla bla 的预订(预订)表单。

验证工作正常,而我的表单有名称输入文本字段、电子邮件输入文本字段、联系人输入文本字段和日期选择器除外。

插入 jquery 日期选择器后,验证不起作用,日期选择器工作正常。

谁能帮帮我?

<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>

【问题讨论】:

你的意思是,当使用 jQuery datepicker 时,prototype 验证不起作用! 【参考方案1】:

你的代码的问题是你的jquery库和原型库有冲突。

许多 JavaScript 库使用 '$' 作为函数或变量名,就像 jQuery 一样。这里 jquery 和原型库在 '$' 上发生冲突。在 jQuery 的例子中,'$' 只是 'jQuery' 的别名。要解决此问题,请在无冲突模式下添加 jquery。

jQuery.noConflict();

包括你所有的jQuery代码如下:

(function($)     

     //jquery code goes here.    

)(jQuery);

查看完整代码:

<script type="text/javascript">

jQuery.noConflict();

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

</script>

上述过程将确保 jquery 不会与您的其他库(即本例中的原型)冲突。

【讨论】:

我认为It ensures that more than one jquery library can be used simultaneously. 应该是Prevents jQuery from becoming window.$。至少在以前的版本中,您不能加载多个 JQuery,但有 noConflict。 (不过,这是 Resig 在 2007 年的目标,请参阅:video.google.com/videoplay?docid=-474821803269194441)【参考方案2】:

JQuery 和 Prototype 可能在“$”上发生冲突。

试试:

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

【讨论】:

之前遇到过这个问题。上面修复了它。【参考方案3】:

在我的 datepicker 函数中插入以下代码后,datepicker 格式不起作用,JQuery 验证工作正常:

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

【讨论】:

【参考方案4】:

首先加载 JQuery,然后是命名空间,然后加载 Prototype。正如其他人指出的那样,您使用 noConflict 函数命名 JQuery:

<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>

没有测试它,但它应该可以这样工作......祝你好运

【讨论】:

【参考方案5】:

为了解决这个问题,我将 jQuery datepicker 的实现替换为 http://keith-wood.name/uiDatepickerValidation.html

这只是 jquery datepicker 的扩展,但带有额外的验证,效果非常好。

优秀的图书馆!

【讨论】:

【参考方案6】:

我在这里浏览了答案,并同意其他人的观点,需要 jQuery.noConflict()。看起来您正在使用原型和 jquery。其中有冲突的语法。由于您在调用原型后调用 jQuery,因此在某种意义上您使用 jquery 覆盖原型。

取自 dipali 的回答.. 如果你使用这个

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

并替换它(来自您的原始帖子):

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

prototype 和 jquery 都可以和谐地工作。另请注意,您在页面上执行的任何其他 jquery 都需要在其前面加上 $j 而不仅仅是 $

【讨论】:

【参考方案7】:

您只需将请求发出Post 请求而不是Get 请求。当您使用表单时,您希望将数据从表单发送到可能处理数据的服务器,因此它必须是 POST and not Get. 我想这是您进行验证所需要做的唯一更改工作。检查这个 JsFiddle Out:The Solution

【讨论】:

【参考方案8】:

只需在 datepicker 中添加 onClose

$('#date').datepicker(
    onClose: function() 
        $(this).valid();
    
);

【讨论】:

以上是关于插入日期选择器后 Jquery 表单验证不起作用的主要内容,如果未能解决你的问题,请参考以下文章

在 Jquery .html 替换新 div 上的整个 div 选择器后不起作用

更改后,日期选择器验证不起作用-BootStrap

如果选择框选项更改,则 JQuery 验证不起作用

显示时将相同的 HTML 表单元素插入到多个模式中,但验证不起作用

Ajax 在 JQuery 表单插件中不起作用

jquery验证表单不起作用[关闭]