我点击按钮后,在控制台输出了HTML是正确的,但是,在页面的显示还是停留在第一次渲染的界面,不知道怎么回事?其他代码和老师的一模一样,我把我的render发上来
datepicker.render = function(direction){ var year,month; if(monthDate){ year = monthDate.year; month = monthDate.month;} if(direction === 'prev') month--; if(direction === 'next') month++; // console.log(month); var html = datepicker.buildUi(year,month); // document.body.innerHTML = html; // $wrapper = document.querySelector('ui-datapicker-wrapper') // if(!$wrapper){ $wrapper = document.createElement('div'); $wrapper.className = 'ui-datapicker-wrapper'; // } $wrapper.innerHTML = html;document.body.appendChild($wrapper); console.log(html); }
chrome 里查看页面元素,可以看到,没点击一次按钮,就创建一个wrapper,但后来创建的在init创建的下层,因此看起来数据是更新了,但页面展示却还是init的情况。所以,楼上真的很厉害,在你的解答里,我才知道,判断wrapper是否存在是非常重要的。当容器存在才时候,就只是更新内部的HTML即可。
写成这样就行了:
datePicker.render = function(direction) {
var year, month;
if (monthData) {
year = monthData.year;
month = monthData.month;
}
if (direction === 'prev') month--;
if (direction === 'next') month++;
var html = datePicker.buildUi(year, month);
if (!$wrapper) {
$wrapper = document.createElement('div');
$wrapper.className = 'ui-datepicker-wrapper';
document.body.appendChild($wrapper);
}
$wrapper.innerHTML = html;
}