如何阻止变更事件?

时间:2011-09-05 05:07:56

标签: javascript jquery

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更改将被调用两次。因为它无法给出验证消息。让我说我的第一个日期是错误的。第二个日期是正确的。因为该验证消息将被隐藏。

如果第一个日期错误,有没有办法可以停止第二次触发?

1 个答案:

答案 0 :(得分:0)

这不是“被叫两次”,而是你多次使用$(".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 seletor的字符串。

我还假设daymarker.bindElement可以被调用任意次,每次都有不同的目标DOM元素。如果情况并非如此,那么无论如何都要在daymarker迭代器函数中创建一个新的.each()