jQuery 更改事件根本没有触发
jQuery Change event not firing at all
在我的编辑视图中,我有一个接受 Date
的文本框。
使用 MVC,当我转到“编辑视图”时,字段中已经填入了该记录的信息,这很好。
但是,我想在其中一个字段上设置事件侦听器,特别是如上所述接受日期的字段。
当我转到该页面时,我检查了来源,该字段看起来像这样:
<div class="form-group">
<label class="control-label col-md-2" for="DateEntered">Date Entered:</label>
<div style="width:26.5%" class="col-md-10">
<div id="datetimepicker" class="input-group date">
<input class="form-control text-box single-line" id="DateEnteredPhase" name="DateEntered" type="datetime" value="09/21/2016" />
<span class="field-validation-valid text-danger" data-valmsg-for="DateEntered" data-valmsg-replace="true"></span>
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
</div>
注意值 "09/21/2016"
一开始是正确的。
这是我的 jQuery:
$(document).ready(function () {
$(function () {
$('#DateEnteredPhase').change(function () {
var dateString = $('#DateEnteredPhase').val();
alert(dateString);
});
});
});
现在,我已将该文本框中的日期值更改为 "09/22/2016"
,并且未触发更改事件。此外,当我在 after 检查来源时,我更改了日期,该值仍然显示 "09/21/2016"
而不是 "09/22/2016"
.
当我将其插入 JSFiddle 时,更改事件会正确触发。
我该如何解决这个问题?
感谢任何帮助。
更新
其中 DateTimePicker (by eonasdan) 在 jQuery 中初始化:
$(function () {
$('#datetimepicker').datetimepicker({
format: 'MM/DD/YYYY'
});
});
如果源是动态生成的 - 事件将不会绑定到文档就绪的元素。试试这个。
$(document).on("change", "#DateEnteredPhase", function () {
var dateString = $('#DateEnteredPhase').val();
alert(dateString);
});
问题:应用插件后,用户必须通过 UI 上显示的日历更改日期,并且 插件将以编程方式更改日期,这不会触发您的更改事件。
解决方案:使用事件处理程序中内置的插件来捕获更改事件,然后执行您的代码。所以下面的代码必须工作。这是来自 Plugin Documentation
的更改事件详细信息
$(function () {
$('#datetimepicker').datetimepicker({
format: 'MM/DD/YYYY'
});
//add change event listner that plugin supports
$('#datetimepicker').on('dp.change',function(e){
alert(e.date);
})
});
在我的编辑视图中,我有一个接受 Date
的文本框。
使用 MVC,当我转到“编辑视图”时,字段中已经填入了该记录的信息,这很好。
但是,我想在其中一个字段上设置事件侦听器,特别是如上所述接受日期的字段。
当我转到该页面时,我检查了来源,该字段看起来像这样:
<div class="form-group">
<label class="control-label col-md-2" for="DateEntered">Date Entered:</label>
<div style="width:26.5%" class="col-md-10">
<div id="datetimepicker" class="input-group date">
<input class="form-control text-box single-line" id="DateEnteredPhase" name="DateEntered" type="datetime" value="09/21/2016" />
<span class="field-validation-valid text-danger" data-valmsg-for="DateEntered" data-valmsg-replace="true"></span>
<span class="input-group-addon">
<span class="glyphicon glyphicon-calendar"></span>
</span>
</div>
</div>
</div>
注意值 "09/21/2016"
一开始是正确的。
这是我的 jQuery:
$(document).ready(function () {
$(function () {
$('#DateEnteredPhase').change(function () {
var dateString = $('#DateEnteredPhase').val();
alert(dateString);
});
});
});
现在,我已将该文本框中的日期值更改为 "09/22/2016"
,并且未触发更改事件。此外,当我在 after 检查来源时,我更改了日期,该值仍然显示 "09/21/2016"
而不是 "09/22/2016"
.
当我将其插入 JSFiddle 时,更改事件会正确触发。
我该如何解决这个问题?
感谢任何帮助。
更新
其中 DateTimePicker (by eonasdan) 在 jQuery 中初始化:
$(function () {
$('#datetimepicker').datetimepicker({
format: 'MM/DD/YYYY'
});
});
如果源是动态生成的 - 事件将不会绑定到文档就绪的元素。试试这个。
$(document).on("change", "#DateEnteredPhase", function () {
var dateString = $('#DateEnteredPhase').val();
alert(dateString);
});
问题:应用插件后,用户必须通过 UI 上显示的日历更改日期,并且 插件将以编程方式更改日期,这不会触发您的更改事件。
解决方案:使用事件处理程序中内置的插件来捕获更改事件,然后执行您的代码。所以下面的代码必须工作。这是来自 Plugin Documentation
的更改事件详细信息$(function () {
$('#datetimepicker').datetimepicker({
format: 'MM/DD/YYYY'
});
//add change event listner that plugin supports
$('#datetimepicker').on('dp.change',function(e){
alert(e.date);
})
});