我已经搜索了一下,并且无法找到与我的具体问题相关的内容,所以如果在其他地方已经回答了这个问题,请道歉。
我正在使用带有javascript和jQuery(1.7.2)的内容编辑器webpart来创建一个sharepoint 2010网站,以构建一个可以使用多个复选框进行过滤的表格显示。该表汇总了我在页面加载时查询的多个后端列表中的数据,并将其存储到数据结构中以构建表。浏览器IE11在IE8强制仿真模式下运行
我遇到了一个问题,虽然有些复选框在第一次点击时没有改变它们的状态,但点击事件处理程序仍然会触发,方法仍然可以正确地确定当前状态。
代码看起来像下面的内容(由于实际代码非常冗长而被释义)
function filterActivity() {
$('#displaytable').empty();
//returns an array of keys sorted by the project's name
//so that they appear in sorted order in display table
//the key is sharepoint's internal listItem ID
//but each project has an activity ID that uniquely identifies it
var projectItems = sortByActivityName('projectDB');
for (var i = 0; i < projectItems.length; i++) {
var projectKey = projectItems[i];
var projectItem = Lists['ProjectDB'][projectKey]; //get corresponding info from stored data
var scheduleItems = sortByActivityName('scheduleDB');
var endDate = '';
for (var j = 0; j < scheduleItems.length; j++) {
var scheduleKey = scheduleItems[j];
var scheduleItem = Lists['ScheduleDB'][scheduleKey];
if (projectItem.activity_ID == scheduleItem.activity_ID) {
//get related records to the current project
endDate = scheduleItem.endDate;
}
}
//similar loops to get related records from other list
var rowstring = "<tr>";
if (projectItem.status == "Open" && $('#open_check').is(":checked")) {
//if the project is open and the filter for showing open projects is checked, build the table row and append it
rowstring += "<td>" + projectItem.displayName + "</td>";
rowstring += "<td>" + endDate + "</td>";
rowstring += "</tr>";
$('#displaytable').append(rowstring);
}
}
}
<input type="checkbox" id="open_check" onclick="filterActivity()" value="Open" checked>
<table id="displaytable">
<thead>
<tr>
<th>Name</th>
<th>Project End Date</th>
</tr>
</thead>
<tbody>
</tbody>
</table>
当我运行页面时,在加载时它会正确地将打开的项目附加到表中。但是当我点击“打开”复选框取消选中它并隐藏打开的项目时,复选框会触发onclick事件并运行,但状态不会改变,例如
filterActivity()
运行$("#open_check").is(":checked")
返回true,只有打开的项目再次附加到表中这似乎只影响专门运行filterActivity()
方法的复选框,页面上的其他复选框工作正常。它也是不一致的,因为在极少数情况下,复选框会在第一次单击时正确更改状态。
据我所知,这是某种竞争条件,但我不确定是什么导致它 - 是否存在IE8如何管理点击处理程序的阻塞行为?我不认为这是一个jQuery问题,因为我没有使用jQuery设置复选框,jQuery确定的状态似乎与显示的一致。
因为这是遗留系统,遗憾的是我没有选择使用更新的浏览器或更新版本的jQuery。
答案 0 :(得分:0)
我很傻,错过了森林的树木
在页面的其他地方我动态创建一些复选框并使用jQuery绑定click处理程序,但是我使用了选择器$('input:checkbox')
,它错误地将另一个单击处理程序绑定到受影响的复选框。
更改选择器以排除非编程生成的复选框解决了问题