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

07-28 06:00