function duplicateWithLines()
        {
          var datefield = jQuery("#lineItemDate").val();
          if ( !( datefield && datefield.match( /^\d{1,2}[/]\d{1,2}[/]\d{4}$/ ) ) ) alert("Date is required");
          else {
           //DO blah blah
          }
        }
    ---
    ---

          <input type='button' class='duplicate_button' name='duplicateWithLines' value='Duplicate Line Items:' onClick='duplicateWithLines()'/>
          <hsi:calendar name="lineItemDate" size='10' maxlength='10' />


在行var datefield = jQuery(“#lineItemDate”)。val();我认为价值即将来临。因此,它无法进入else块。如果条件满足,则将警报msg打印出来。但是它必须输入else块。
并且日期格式将输入为dd / mm / yyyy。
进入其他区块的方式是什么。

最佳答案

解决val()问题:您正在尝试查找ID为lineItemDate的元素。但是您的元素没有ID。它确实有一个名称,因此$('[name=lineItemDate]').val()应该可以工作。

如果格式是固定的(dd/mm/yyyy),请尝试以这种方式修改if部分,以避免难看而昂贵的匹配:

var dateFromValue = new Date(
                     $('[name=lineItemDate]').val().split('/').reverse().join('-')
                    );
if (!isnNaN(dateFromValue)) {
   /* it's a date! */
} else {
  /* don't bother */
}


在进行此操作时,请勿使用内联处理程序。内联处理程序的每次激活都会产生一个新的javascript解释器。在脚本中使用:

$('[name=duplicateWithLines]').on('click', duplicateWithLines);


重命名函数以避免名称冲突可能是明智的。

09-26 16:32