【问题标题】:Open datepicker only if condition is true?仅当条件为真时才打开日期选择器?
【发布时间】:2018-02-07 17:04:55
【问题描述】:

我在我的待办事项表中使用了一个日期选择器,用户可以使用它来选择某个日期。我正在使用它来选择某个“完成日期”,并且我只希望在待办事项标记为 100% 完成时打开日期选择器。现在,如果待办事项未标记为 100%,则日期选择器将打开。有谁知道如何添加条件语句

if (todos[i].progress != 100) { *dont open datepicker* }

我尝试将它添加到我的事件函数中,但它没有像我希望的那样工作。

HTML:最后一个 td 元素用于日期选择器。

tr class="rowTable dropdown-button" data-id="%todoID%" data-activates="todo_dropdown" data-context="true" data-type="edit-%canedit%" data-canedit="%canedit%" data-constrainwidth="false">
       <td class="tableData">
           <div class="checkbox" data-complete="%notTrue%" data-show="hidden">
               <div class="todo_checkbox"></div>
           </div>
       </td>
       <td class="tableData">%todoTitle%</td>
       <td class="tableData">%resources%</td>
       <td class="%isOverdue% tableData">%duedate%</td>
       <td class="tableData">%percentcomplete%</td>
       <td class="completedCalendar tableData"><input value="%dateCompleted%" class="datepicker picker_input" data-id="%todoID%" id="todo_completeddate" style="border:none" readonly="readonly"/></td>

JavaScript:

$('.datepicker').on('change', function (e) {
       var $targ = $(e.currentTarget);
       var todoID = $targ.parents(".rowTable").data("id");
       var todos = currentItems;
       for (var i = 0; i < todos.length; i++) {
           if (todoID == todos[i].id) {
               if (todos[i].progress == 100) {
                   var dateSet = $('.datepicker[data-id=' + todoID + ']').val();
                   todos[i].completed_date = dateSet;
               }
           }
       }
 })

【问题讨论】:

  • 你可以展示工作中的 plnkr 吗?
  • @Dipakchavda Idk 因为待办事项来自服务器,我认为我无法获取它们

标签: javascript jquery jquery-ui datepicker


【解决方案1】:

你应该尝试使用

beforeShow: function(input, inst) {
        // check condition here 
}

【讨论】:

    【解决方案2】:

    您可以检查您的更改条件,就像您当前在更改日期选择器中所做的那样。这可能是表单、表格等中的更改。在该 OnChange 中,您可以检查条件并访问日期选择器并隐藏它或像这样显示它

    $(".datepicker").hide();
    $(".datepicker").show();
    

    【讨论】:

    • 如果您指的是第一个 元素中的复选框,我将其设置为当您单击它时,它将完成日期设置为今天的日期。日期选择器以防您想将其更改为另一个日期
    • @PatrickS 我不确定您需要检查的条件 - 但您可以检查此表单何时更新,并在条件为真时设置日期选择器以显示或隐藏,就像我上面提到的那样。
    【解决方案3】:

    我认为在您的情况下,您应该在从服务器加载数据时禁用/隐藏日期字段。

    您还可以使用日期选择器小部件的beforeShow 事件。但是您将无法阻止打开日期选择器窗口。您可以在显示日历后立即隐藏它。请注意,您必须在 beforeShow 中使用 setTimeout,否则它将不起作用。

      beforeShow: function(input, inst) {
        setTimeout(function() { 
          if (condition) {
            $(".foo").datepicker("widget").hide();
          }
        }, 0);
    

    }

    See here for example

    【讨论】:

      猜你喜欢
      相关资源
      最近更新 更多
      热门标签