Jquery: keyup-input 没有检测到日期选择器的变化

Jquery: keyup-input does not detect change from datepicker

我想用 jquery 编写实时搜索 (mysql) 代码。有四个搜索参数(姓氏、名字、开始日期、结束日期),它们应根据所有框中的输入执行实时搜索 (AND)。使用日期选择器小部件选择日期。

虽然我的代码可以很好地处理名字和姓氏,但输入字段上的 .keyUp() 无法识别添加和更改的日期(但会显示在输入字段中)。

如何在不破坏名称的情况下使日期正常工作?

脚本(放在文档末尾):

 -- plain html stripped --
 lastname <input id="lastname" type="text" name="lastname" />
 <br />
 forename <input id="forename" type="text" name="forename" />
 <br />
 startdate <input id="startdate" type="text" name="startdate" />
 <br />
 enddate <input id="enddate" type="text" name="enddate" />    

<script>
$(function() {
      var dateOptions = {
            showMonthAfterYear: false,
            showOn: 'both',
            yearRange: "-40:+10",
            changeYear: true,
            changeMonth: true,
        };  
$( "#startdate" ).datepicker(dateOptions);
$( "#enddate" ).datepicker(dateOptions);
});
</script>
<script>
$('input').keyup(function () {
var inputData = [];
$('input').map(function () {
    inputData.push({"name" : this.name, "value" : this.value});
}).get();

$.ajax({ 
    type: "POST",
    url: "dbquery.php",             
    data: inputData,
    dataType: "html", 
    success: function(response){                    
        $("#responsecontainer").html(response); 
        return response;
    }});
});

不会在 datePicker 上触发按键事件,因为您不使用键盘与其交互。改为监听 change 事件(/以及):

替换: $('input').keyup(function () {...

$(':input').on("keyup change", function () {...

使用日期选择器的目的是避免手动输入日期,因为这有很多问题,包括日期格式、验证等。因此您不应该为它们使用关键事件。事实上,考虑在这些输入上使用只读属性。

请参阅 datepicker.onSelect() 获取所选日期:

http://api.jqueryui.com/datepicker/#option-onSelect

在我看来,最简单的方法是在执行 AJAX 调用之前 assemble 所有数据,而不是使用事件。在这种情况下,您将使用 getDate() 函数:

http://api.jqueryui.com/datepicker/#method-getDate

除了 moob 的答案之外,您还可以使用 jQuery 的 .change() 事件 - .on( "change", handler )

的快捷方式

https://api.jquery.com/change/