var InDate = trim($(".inDate").val());
if (InDate == '') {
$(".inDate").val(dateDisplayFormat);
}
//Bind date picker
daymarker.bindElement(".inDate",
{
onSelect: function(date) {
$(".inDate").trigger('change');
},
dateFormat:jsDateFormat
});
$(".inDate").change(function() {
//some validation functions are called here.
});
可以说我有两行,分别是indate和outdates。
例如:
Indate outDate
2011-02-20 2011-02-24
2011-02-25 2011-02-27
所以当我使用日期选择器更改第一个日期时,indate change将被调用两次。因此由于无法提供验证消息。可以说我的第一个日期是错误的,第二个日期是正确的。消息将被隐藏。
如果第一个日期有误,有没有办法我可以停止第二个触发器???
最佳答案
不是说它被“两次调用”,而是您多次使用$(".inDate")
,它总是指匹配元素的完整集合,而不仅仅是您当时碰巧感兴趣的元素。
这可能更接近您的预期:
// loop through each matching element
$(".inDate").each(function(index, elem){
var
// this particular element
$elem = $(elem),
InDate = trim($elem.val());
if (InDate === '') {
$elem.val(dateDisplayFormat);
}
//Bind date picker
daymarker.bindElement(elem, {
onSelect: function(date) {
$elem.trigger('change');
},
dateFormat:jsDateFormat
});
$elem.change(function() {
//some validation functions are called here.
});
});
我认为
daymarker.bindElement
足够聪明,可以将实际的DOM元素作为其第一个参数,并且不特别要求包含CSS选择器的字符串。我还假定
daymarker.bindElement
可以被调用任意次,每次都使用不同的目标DOM元素。如果不是这种情况,那么一定要在daymarker
迭代器函数内创建一个新的.each()
。