我想用datepicker textfield,name,contact和bla bla bla创建一个预订(预订)表单。
验证工作正常,而我的表单得到名称输入文本字段,电子邮件输入文本字段,联系人输入文本字段和日期选择器除外。
插入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>
答案 0 :(得分:10)
您的代码存在的问题是您的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不与您的其他库冲突,即在这种情况下的原型。
答案 1 :(得分:6)
JQuery和Prototype可能会在'$'上发生冲突。
尝试:
<script type="text/javascript">
var $j = jQuery.noConflict()
$j(function() {
$j("#datepicker").datepicker();
});
</script>
答案 2 :(得分:4)
在我的datepicker函数,datepicker中插入以下代码后 格式不起作用,JQuery验证工作正常:
<script type="text/javascript">
var $j = jQuery.noConflict()
$j(function() {
$j("#datepicker").datepicker();
});
</script>
答案 3 :(得分:2)
首先加载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>
没有测试它,但它应该这样工作......祝你好运
答案 4 :(得分:1)
为了解决这个问题,我将jQuery datepicker的实现替换为http://keith-wood.name/uiDatepickerValidation.html
这只是jquery datepicker的扩展,但有额外的验证,效果很好。
优秀的图书馆!
答案 5 :(得分:1)
我在这里滚动了答案,并同意其他人,需要jQuery.noConflict()。它看起来像你使用原型和jquery。哪个语法有冲突。因为你在调用prototype之后调用了jQuery,所以你在某种意义上用jquery覆盖了原型。
取自dipali的答案..如果你使用这个
<script type="text/javascript">
var $j = jQuery.noConflict()
$j(function() {
$j("#datepicker").datepicker();
});
并将其替换(来自原始帖子):
<script>
$(function() {
$( "#datepicker" ).datepicker();
});
</script>
原型和jquery都将协调工作。另请注意,您在页面上执行的任何更多jquery将需要$ j而不是$
答案 6 :(得分:1)
您只需要提出Post
请求,而不是Get
请求。当您使用表单时,您希望将表单中的数据发送到可能处理数据的服务器,因此它必须是POST and not Get.
我想这是您需要做的唯一更改才能生成你的验证工作。检查这个JsFiddle Out:The Solution
答案 7 :(得分:0)
只需在datepicker中添加onClose
$('#date').datepicker({
onClose: function() {
$(this).valid();
}
});