我正在通过ajax响应更新链接属性值。但是当我再次单击按钮/链接时,将获取旧值而不是新值。
下面是我的代码;
<div class="calendar-control"><a class="evecal-month-view-control fright next-month" href="#" data-month="2" data-year="2019">Next</a><span class="text-center month-name">January 2019</span><a class="evecal-month-view-control fright prev-month" href="#" data-month="12" data-year="2018">Previous</a></div>
还有Jquery代码。
jQuery(document).on('click', '.evecal-month-view-control', function(e){
e.preventDefault();
var month = jQuery(this).data('month');
var year = jQuery(this).data('year');
console.log(month);
_getMonthCalendar(month, year);
});
var _getMonthCalendar = function(m, y){
jQuery.ajax({
type: 'POST',
url: eventcaldata.ajaxurl,
data: {
action: 'ec_ajax_month_table',
year: y,
month: m,
nonce: eventcaldata.nonce,
},
beforeSend: function(){
console.log('sending...');
},
success: function(response){
jQuery('.next-month').attr( 'data-month', response.nextmonth.month );
jQuery('.next-month').attr( 'data-year', response.nextmonth.year );
jQuery('.prev-month').attr( 'data-month', response.prevmonth.month);
jQuery('.prev-month').attr( 'data-year', response.prevmonth.year);
}
});
}
首先在
.next-month
类上,data-month
属性值是2
然后在回复后将其更改为3
。但是当我再次点击 该按钮在应该为2
时获得3
值
答案 0 :(得分:1)
请勿混用attr()
和data()
的用法。 data()
缓存从元素读取的值,并且不更新属性。因此,如果您使用数据更新,attr将不会看到它。选择一个,然后坚持下去。
答案 1 :(得分:1)
jQuery对象上的.data()方法从初始读取中缓存值。随后对.data()的调用将首先在jQuery的数据存储中查找并向您发送该值。 .attr()不会更新数据存储,但是会更新HTML中的属性。使用.data()或.attr(),但要避免混合搭配。