作为用户要求,我必须禁用退格按钮以在历史记录中导航回来。我做了以下代码
//Bind back nutton to prevent escaping the page with backspace
$j(document).unbind('keydown').bind('keydown', function (event) {
var doPrevent = false;
if (event.keyCode === 8)
{
if(event.target == document.body){
if(event.preventDefault()){ event.preventDefault(); }
event.stopEvent();
event.returnValue = false;
}
}
});
除了IE7和IE8之外,这在所有浏览器中都能正常运行。我无法将输入类型绑定为异常,因为SharePoint中的内容编辑器允许修改元素div,段落等中的文本。解决方案在IE8中不起作用,因为event.target返回有鼠标悬停时的元素没有具有焦点的控件。
答案 0 :(得分:1)
由我自己解决,案件结案。
编辑:2012年与SharePoint 2010和jquery 1.x合作,今天不确定。
//Bind back button to prevent escaping the page with backspace
$(document).unbind('keydown').bind('keydown', function (event) {
if (event.keyCode === 8)
{
var doPrevent = true;
//Chrome, FF, Safari
if(event.target == document.body){
doPrevent = true;
}
//IE
else
{
var nodeName = event.target.nodeName.toLowerCase();
if((nodeName == "input" && event.target.type == "text") || nodeName == "textarea")
{
doPrevent = false;
}
var SPEditTabInstance = $(document).find("li[id='Ribbon.EditingTools']");
if(SPEditTabInstance != "undefined" && SPEditTabInstance != null && $(SPEditTabInstance).children().length > 0){
doPrevent = false;
}
}
if(doPrevent)
{
//Chrome, FF, Safari
if(event.preventDefault()){ event.preventDefault(); }
//IE
else
{
event.returnValue = false;
}
}
}
});
答案 1 :(得分:1)
我建议对Machinegon的修正进行调整。如果用户在类型为text的readonly输入控件中单击退格键,代码也应该阻止默认行为。
extension CGImage{
func getPixelColor(pos: CGPoint) -> UIColor {
let pixelData = self.dataProvider!.data
let data: UnsafePointer<UInt8> = CFDataGetBytePtr(pixelData)
let pixelInfo: Int = ((Int(self.width) * Int(pos.y)) + Int(pos.x)) * 4
let r = CGFloat(data[pixelInfo]) / CGFloat(255.0)
let g = CGFloat(data[pixelInfo+1]) / CGFloat(255.0)
let b = CGFloat(data[pixelInfo+2]) / CGFloat(255.0)
let a = CGFloat(data[pixelInfo+3]) / CGFloat(255.0)
return UIColor(red: r, green: g, blue: b, alpha: a)
}
}
答案 2 :(得分:0)
尝试回到创建要求的人员,从可用性的角度来看,打破所有浏览器无处不在的重要功能并不是一个特别好的主意。这样做的成本(包括花时间向用户解释为什么他们的浏览器“不再工作”)将大大超过后退按钮有点烦人的成本。
答案 3 :(得分:0)
Machinegon的答案很好用,我只是添加它来处理另一种情况。
如果输入框是readonly
或disabled
,并且您在输入框上按了退格键,则转到上一页。因此,以下代码将可以处理这种情况:
//Bind back button to prevent escaping the page with backspace
$(document).unbind('keydown').bind('keydown', function(event) {
if (event.keyCode === 8) {
var doPrevent = true;
//Chrome, FF, Safari
if (event.target == document.body) {
doPrevent = true;
}
//IE
else {
var nodeName = event.target.nodeName.toLowerCase();
if (((nodeName == "input" && event.target.type == "text") || nodeName == "textarea")
&& !event.target.disabled && !event.target.readOnly) {
doPrevent = false;
}
}
if (doPrevent) {
//Chrome, FF, Safari
if (event.preventDefault()) {
event.preventDefault();
}
//IE
else {
event.returnValue = false;
}
}
}
});