我已经为我们的抽象实体设置了一个队列。我试图防止记录的双击打开,我为事件设置了一个处理程序,并在事件对象上调用.stopPropagation()和.preventDefault(),但它继续打开。我已经为事件设置了一个处理程序,并在事件对象上调用.stopPropagation()和.preventDefault(),但它继续打开窗口。
不知道我是不是漏掉了什么明显的东西,下面是我的代码。
function attachDoubleClick() {
var grid = document.getElementById("gridBodyTable");
if (grid == null) {
setTimeout(function () { attachDoubleClick(); }, 2000); //if the grid hasn’t loaded run this again
return;
}
function handler(e) {
var abstractId = document.getElementsByClassName("ms-crm-List-SelectedRow").item().getAttribute("oid").replace("}", "").replace("{","");
XrmSvcToolkit.retrieve({
entityName: "prod_abstract",
id: abstractId,
select: ["prod_abstractstatus"],
async: false,
successCallback: function (result) {
if (result.prod_abstractstatus.Value != 108410000) {
alert("This abstract is already being worked on or is completed.");
e.stopPropagation();
e.preventDefault();
console.log(e);
return;
}
},
errorCallback: function (error) {
console.log(error);
}
});
}
grid.ondblclick = handler;
}
问题是我需要在addEventListener中添加第三个参数true。(这就是useCapture参数。)最终的代码是这样的。
function attachDoubleClick() {
var grid = document.getElementById("gridBodyTable");
if (grid == null) {
setTimeout(function () { attachDoubleClick(); }, 2000); //if the grid hasn’t loaded run this again
return;
}
grid.addEventListener("dblclick", handler, true);
}
function handler(e) {
console.log(e);
var abstractId = document.getElementsByClassName("ms-crm-List-SelectedRow").item().getAttribute("oid").replace("}", "").replace("{", "");
XrmSvcToolkit.retrieve({
entityName: "prod_abstract",
id: abstractId,
select: ["prod_abstractstatus"],
async: false,
successCallback: function (result) {
if (result.prod_abstractstatus.Value != 108410000) {
alert("This abstract is already being worked on or is completed.");
e.stopPropagation();
e.preventDefault();
return;
}
},
errorCallback: function (error) {
console.log(error);
}
});
}