【问题标题】:jQuery hide only fires once [duplicate]jQuery隐藏只触发一次[重复]
【发布时间】:2014-01-01 10:36:00
【问题描述】:

我有一个没有在日期选择时关闭的日历。所以我有一个目标类(.day)在点击时关闭日历。但是,当我重新打开日历并选择一个新日期时,它不会再次关闭。我在这里寻找答案,虽然标题和问题相似,但代码并不完全相同......

$('.day').click(function () {
  $(".datepicker").hide();
});

<span class="input-append date dp-ticket" data-date="today" data-date-format="dd-mm-yyyy">
  <input type="text" class="add-on form-control col-xs-10 col-sm-10 col-md-10 col-lg-10" placeholder="Or, choose any date" name="startdate" id="startdate">
  <button class="add-on btn btn-search col-xs-2 col-sm-2 col-md-2 col-lg-2" type="button">
    <span class="icon-calendar"></span>
  </button>
</span>

【问题讨论】:

  • 我看不到课程.day它在哪里。?
  • 你能做一个小提琴吗?
  • .day 是否被动态添加到 DOM 中?
  • 我猜 .day 元素是由插件生成的,所以对于新元素你应该使用委托,例如:$(document.body).on('click', '.day', function () { $(".datepicker").hide(); });
  • 请给我们更多细节。

标签: javascript jquery html datepicker


【解决方案1】:

尝试使用 on。

$('.day').on('click', function () {
  $(".datepicker").hide();
});

【讨论】:

  • 几乎一样。这两个函数都会给出相同的输出。
【解决方案2】:

抱歉,除了 jQuery 之外,我在代码示例中没有看到 .day 或 .datepicker。也许我错过了什么……哈哈

我的猜测是脚本注册了原始的隐藏事件,但没有注册 .datepicker 在您尝试更改日期时再次显示,因此据脚本所知,当您更改日期时它仍然处于隐藏状态。

您可以尝试输入.change() 来检测日期字段(或放置日期数据的任何位置)值的变化。

$(".foo").val().change(function() {
  $(".datepicker").hide();
});

您可能需要设置一个默认值,但每次更改它都会运行隐藏 .datepicker 的函数。

【讨论】:

    【解决方案3】:

    我不确定 .day 是如何被实现的,因为您没有在代码中显示它,但因为它只触发一次,我认为您正在将 .day 动态添加到 DOM。

    如果是这样,你可以这样做:

    $('SELECTOR_OF_PARENT').on('click', '.day', function(){
        $(".datepicker").hide();
    });
    

    你也可以这样做

    $(document).on('click', '.day', function(){
        $(".datepicker").hide();
    });
    

    这里是.on()的更多信息

    【讨论】:

      猜你喜欢
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多