我正在尝试在单击日期时制作 jQuery ui 日历进行 ajax 调用,但几天前我遇到了问题。我发现了一段应该可以做到这一点的代码,但我发现它使用了 jQuery 自定义选择器。该代码给了我一个错误,所以我开始深入研究自定义选择器以了解有关它们的更多信息。到目前为止,我还无法找出为什么我会出现这种奇怪的行为。
这是一张希望能把事情弄清楚的图片,我会在它之后解释更多
我在控制台输入
$('.ui-datepicker-calendar td a:test(3)')
正如你所看到的,我 meta2 和 stack2 是未定义的,还有一件更奇怪的事情,为什么 index2 返回一个 #document ,它应该包含元素数组的索引。
此外,元素 (el2) 甚至不是正确的元素。看看,我打电话
$('.ui-datepicker-calendar td a:test(3)')
这应该从日历中选择所有日期,并且在第一个循环中,console.log 应该打印出这个
<td class=" ui-datepicker-week-end " data-handler="selectDay" data-event="click" data-month="8" data-year="2012"><a class="ui-state-default" href="#">1</a></td>
但相反,我得到了整个文档中的第一个“a”标签,在这种情况下,它是上个月的标签(如图所示)。
如果有人可以对这种情况有所了解,请这样做。哦,还有一件事我忘记了
meta2 ,它应该包含这个
[
':test(argument)', // full selector
'test', // only selector
'', // quotes used
'argument' // parameters
]
在我的情况下,它又是未定义的......
我将分享我的 javascript 代码,希望对您有所帮助
<script>
$(function()
{
$.expr[":"].test = function(el2,index2,meta2,stack2)
{
debugger;
console.log(el2);
console.log(index2);
console.log(meta2);
console.log(stack2);
}
})
$(function()
{
function getJsonDate(year, month)
{
$.getJSON('dates.php?year='+year+'&month='+month, function(data)
{
var i = 0;
for (i = 0; i < data.data.length; i++)
{
debugger;
var myDay = data.data[i]['d'];
$('.ui-datepicker-calendar td a:exactly('+data.data[i]['d']+')')
.css({color: '#f00'})
.attr('href',data.data[i]['link'])
.parent().attr('onclick','');
}
});
}
$.expr[":"].exactly = function(el, index, meta, stack)
{
debugger;
console.log(el);
console.log(index);
console.log(meta);
console.log(stack);
var s = meta[3];
if (!s) return false;
return eval("/^" + s + "$/i").test($(el).text());
};
$('#datepicker').datepicker(
{
inline: true,
onSelect: function(dateText, inst)
{
Date.prototype.toString = function () {return isNaN (this) ? 'NaN' : [this.getDate(), this.getMonth(), this.getFullYear()].join('/')}
d = new Date(dateText);
getJsonDate(d.getFullYear(), d.getMonth()+1);
},
onChangeMonthYear: function(year, month, inst)
{
//alert(year);
//alert(month);
getJsonDate(year, month);
}
});
});
</script>