【问题标题】:jQuery UI Datepicker altField .change function not working?jQuery UI Datepicker altField .change 函数不起作用?
【发布时间】:2010-07-24 12:50:22
【问题描述】:

谁能告诉我为什么当我使用 jQuery UI Datepicker 选择日期时console.log 行没有运行?

<script type="text/javascript">
    $(window).ready(function() {
        $(function() {
            $("#datepicker").datepicker({ altField: '#dateIntermediate'});
        });
        $('#dateIntermediate').change(function(){ 
            console.log("dateIntermediate changed");
        });
    });
</script>
<p>Date: <input id="datepicker" type="text"></p>
<input type="hidden" id="dateIntermediate" />

【问题讨论】:

  • 我想既然是隐藏字段,就不会触发。 DOM onchange 事件仅针对以下元素定义:

标签: javascript jquery jquery-ui jquery-ui-datepicker jquery-events


【解决方案1】:

在这些情况下,浏览器不会触发change event(通过脚本设置值),如果你想知道它何时发生,你可以使用onSelect handler作为日期选择器,如下所示:

$(function() {
  $("#datepicker").datepicker({ 
    altField: '#dateIntermediate',
    onSelect: function() { 
      alert('Current #dateIntermediate value: ' + $("#dateIntermediate").val());
    }
  });
});

You can test it here。或者,您也可以以同样的方式触发您当前拥有的 change 处理程序:

$(function() {
  $("#datepicker").datepicker({ 
    altField: '#dateIntermediate',
    onSelect: function() { 
      $("#dateIntermediate").change();
    }
  });
  $('#dateIntermediate').change(function(){ 
    console.log("dateIntermediate changed");
  });
});​

You can test that here


顺便说一句,您不需要$(window).ready(function() { }); 包装器,它相当于$(document).ready(function() { });,它已经由您的$(function() { }); 包装器处理。您当前的方法有效,因为 $(anything).ready() 都在同一个地方,但不需要多个包装器,所以只需删除外部的 :)

【讨论】:

  • 这种方法可以正常工作,除非您使用键盘导航选择了日期,然后从日期选择器字段中选择标签。在这种情况下,altField 会保留您刚刚选择的日期,但不会在 altField 上触发 change 事件。有什么想法吗?
猜你喜欢
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 2011-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多