如何仅在单击图标时显示日历?

How to show calendar only on icon click?

我在我的应用程序中使用 bootstrap-datepicker-1.9.0。最近客户要求仅当用户单击日历图标时才显示日历。当前代码适用于整个输入组。这是我的代码示例L

$(document).ready(function() {
        setDatepicker("input-group.date");
});

function setDatepicker(className) {
        $("." + className).datepicker({
        format: "mm/dd/yyyy",
        orientation: "bottom auto",
        autoclose: true
    });
};
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.9.0/js/bootstrap-datepicker.min.js"></script>

<div class="form-group m-1">
  <label class="font-weight-bold" for="begin_dt">Begin Date:</label>
  <div class="input-group date">
    <span class="input-group-prepend"><span class="input-group-text"><i class="fa fa-calendar"></i></span></span>
    <input class="form-control" type="text" name="begin_dt" id="begin_dt" value="">
  </div>
</div>

我只想在用户单击日历图标时显示日期选择器。我仍然没有找到实现它的方法。如果有人知道实现这个的方法请告诉我。

您可以简单地使用 onclick 函数来获取单击图标的父级并在那里显示 datePicker。

我们需要使用 .parent()attr 来获得实际的 classname。因为 class 名称中有一个 space。您可以将其替换为 .

我还添加了结束日期以反映该功能在两个日期都有效。

编辑:为确保点击图标后日期选择器不显示在输入焦点上:我们可以使用 showOnFocus: "false"

运行 下面的代码段仅适用于图标点击。

function setDatepicker(_this) {
  //Get the parent class name so we can show date picker
  let className = $(_this).parent().parent().parent().attr('class')
  //Remove space and add `.`
  let removeSpace = className.replace(' ', '.')
  $("." + removeSpace).datepicker({
    format: "mm/dd/yyyy",
    orientation: "bottom auto",
    autoclose: true,
    showOnFocus: "false"
  })
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.9.0/js/bootstrap-datepicker.min.js"></script>

<div class="form-group m-1">
  <label class="font-weight-bold" for="begin_dt">Begin Date:</label>
  <div class="input-group date">
    <span class="input-group-prepend"><span class="input-group-text">
        <i class="fa fa-calendar" onclick="setDatepicker(this)"></i>
      </span>
    </span>
    <input class="form-control" type="text" name="begin_dt" id="begin_dt" value="">
  </div>
</div>

<div class="form-group m-1">
  <label class="font-weight-bold" for="begin_dt">End Date:</label>
  <div class="input-group date">
    <span class="input-group-prepend"><span class="input-group-text">
        <i class="fa fa-calendar" onclick="setDatepicker(this)"></i>
      </span>
    </span>
    <input class="form-control" type="text" name="end_dt" id="end_dt" value="">
  </div>
</div>