日付がクリックされたときに jQuery ui カレンダーが ajax 呼び出しを行うようにしようとしていますが、数日前に問題が発生しました。おそらくこれを行うコードのスニペットを見つけましたが、jQueryカスタムセレクターを使用していることがわかりました。コードでエラーが発生したので、カスタム セレクターを調べて詳細を調べました。これまでのところ、なぜこの奇妙な動作が発生するのかを見つけることができませんでした。
これがうまくいけば物事を解決するための写真です。後で詳しく説明します
コンソールに入力しました
$('.ui-datepicker-calendar td a:test(3)')
そして、ご覧のとおり、meta2 と stack2 は未定義であり、もう 1 つ奇妙なことがあります。なぜ 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>