- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
考虑以下 HTML 和 JavaScript,它们也在此处:http://jsfiddle.net/5CetH/
<!DOCTYPE html>
<html>
<head>
<title>Untitled Page</title>
<script type="text/javascript">
var i=0;
function _focus() {
var message = document.getElementById("message");
message.value = message.value + ++i + ". Focus\r\n";
}
function _blur() {
var message = document.getElementById("message");
message.value = message.value + ++i + ". Blur\r\n";
}
</script>
</head>
<body>
<div style="background-color: Aqua; width: 100px; height: 50px" onfocus="_focus()" onblur="_blur()" tabindex="0">
<input name="rb" type="radio" /><br />
<input name="rb" type="radio" />
</div>
<br />
<textarea id="message" rows="15" cols="50"></textarea>
</body>
</html>
我想要的行为如下:
onfocus
事件应该被触发。onblur
事件。它似乎在 Chrome 中运行良好,但在 FireFox 8 或 IE 9 中运行不佳。
关于如何修复我的代码以使其正常工作有什么建议吗?
最佳答案
只能聚焦一些元素,例如<a>
和 <input>
.对于其他元素,您必须自己实现。
// window.addFocusToElem(elem, callbacks) - returns id for removeFocusFromElem
// window.removeFocusByID(id)
// in IE <= 8 the blur events get fired in the wrong order!
// callbacks: { onFocus: function(e) {}, onBlur: function(e) {} } - both methods are optional
(function() {
var addEvent, removeEvent;
(function() {
// sometimes in IE <= 8 the window.blur event isn't fired when the
// window loses the focus but instead it is fired when the window gets
// the focus back again. This requires some hacking - and because
// 'fireEvent' in window === false it even requires some more hacking.
var hasFocus = true;
var queue = [];
addEvent = function(node, evtType, callback) {
if('addEventListener' in node)
node.addEventListener(evtType, callback, false);
else { // IE <= 8
if(evtType === 'blur') {
queue.push(callback);
}
node.attachEvent('on' + evtType, callback);
}
}
removeEvent = function(node, evtType, callback) {
if('removeEventListener' in node)
node.removeEventListener(evtType, callback, false);
else { // IE <= 8
if(evtType === 'blur') {
var length = queue.length;
while(length--) {
if(callback === queue[ length ]) {
queue.splice(length, 1);
break;
}
}
}
node.detachEvent('on' + evtType, callback);
}
}
// IE <= 8
if('documentMode' in document && document.documentMode <= 8) {
setInterval(function() {
if(!document.hasFocus() && hasFocus) {
hasFocus = false;
for(var o in queue) {
queue[ o ](document.createEventObject());
}
}
}, 100);
addEvent(window, 'focus', function(e) {hasFocus = true;});
}
})();
function doClick(node, evtType) {
if('click' in node) { // most Browser (HTML-DOM)
node.click();
} else if('createEvent' in document) { // at least Chrome (16)
var e = document.createEvent('MouseEvents');
e.initEvent('click', true, true);
node.dispatchEvent(e);
} else {
}
}
var id = 0;
var queue = [];
window.addFocusToElem = function addFocusToElem(elem, callbacks) {
var _id = id++;
var entry = queue[ _id ] = {
elem: elem,
onFocus: function(e) {
removeEvent(entry.elem, 'click', entry.onFocus);
addEvent(document, 'click', entry.onBlur);
if('onFocus' in callbacks &&
typeof callbacks.onFocus === 'function') {
callbacks.onFocus(e);
}
},
onBlur: function(e) {
var node = 'target' in e ? e.target : e.srcElement;
while(node) {
if(node === entry.elem) {
break;
}
node = node.parentNode;
}
if(!node) {
removeEvent(document, 'click', entry.onBlur);
addEvent(area, 'click', entry.onFocus);
if('onBlur' in callbacks &&
typeof callbacks.onBlur === 'function') {
callbacks.onBlur(e);
}
}
}
};
addEvent(elem, 'click', entry.onFocus);
addEvent(window, 'blur', function(e) {
doClick(elem.parentNode);
});
addEvent(document, 'keyup', function(e) {
if(e.keyCode === 9) { // tab
var node = 'target' in e ? e.target : e.srcElement;
while(node) {
if(node === elem) {
doClick(elem);
break;
}
node = node.parentNode;
}
if(!node) {
doClick(elem.parentNode);
}
}
});
return _id;
};
window.removeFocusByID = function removeFocusByID(id) {
if(id in queue) {
var entry = queue[ id ];
removeEvent(entry.elem, 'click', entry.onFocus);
removeEvent(document, 'click', entry.onBlur);
delete queue[ id ];
return true;
}
return false;
};
})();
用法:
<div style="background-color: Aqua; width: 100px; height: 50px" id='area'>
<input name="rb" type="radio">Foo<br>
<input name="rb" type="radio">Bar
</div>
<script type='text/javascript'>
var id = addFocusToElem(document.getElementById('area'), {
onFocus: function(e) {
// statements
},
onBlur: function(e) {
// statements
}
});
// removeFocusByID(id);
</script>
关于javascript - 一组单选按钮上的 onfocus 事件如何像单个控件一样工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8579632/
有没有什么办法,如果您在同一页面上有 2 个或更多打开的选项卡,当您聚焦一个选项卡时,所有其他选项卡将立即收到“focus()”通知? 我以 Facebook Chat 为例。如果您收到新消息,所有选
现在我正在更改 onfocus(onclick 等) 事件的默认行为,如下所示: function my(e){ e.style.backgroundColor = "red";//her
一开始我有输入字段,它与 jquery 代码配合得很好,现在我将输入字段更改为 asp.net 文本框,因为我进行了扩展,因此它将数据插入数据库中。所以现在我需要弄清楚它如何与 asp:textbox
我在使 onFocus 和 onBlur 事件正常工作时遇到一些问题 这是我得到的 var var1 $("input").focus(function() { var1 = $(this).va
我有一个字段,我想在其中选择一个输入框来更改字段的背景颜色。我尝试通过一个简单的 onfocus 操作更改输入父级的 html 类,即字段,但我没有看到任何反应。 我有以下内容,并仔细检查了类名。 在
我有很多文本区域文件,我希望它们在聚焦时全部展开 这是我的代码演示:http://jsfiddle.net/PU73y/ 问题是当我点击它们时它们不会展开。这是为什么? 谢谢 this is test
我正在编写一个 JavaScript 聊天应用程序,但我遇到了一个小问题。 这是 HTML 结构: 当用户点击/聚焦聊天框时,我希望文本框自动聚焦。我在聊天框上有这个 onfo
我在谷歌上寻找一种方法来删除焦点文本,但无法弄清楚如果字段中没有输入任何内容,我们如何将其添加回去。 这就是我目前所拥有的... onfocus="if(this.value == 'Name*')
我使用 onfocus 事件处理程序来做几件事。它在初始页面加载后效果很好。但是,在我单击打开模式弹出窗口的链接后,onfocus 事件停止工作。焦点仍然可以正常工作...但是 onfocus 事件永
当我动态附加输入时,onfocus 函数不起作用。 我的代码 $i=1; )"> 我的功能是 function myFun(val){ alert(val); } 最佳答
在使用 Internet explorer 的页面上,我有一个下拉菜单,但在第一次加载页面时,因为它上面有一个 onFocus,所以需要双击才能打开显示菜单。如何避免双击。 onFocus 仍必须触发
我做了 float 文本输入,当用户专注于输入时,我的文本会 float ,但当用户点击我的输入时,我的输入中也需要一个“关闭 x”图标。 To include "x cloase" icon I w
知道我的代码有什么问题吗?我的 onFocus 事件在 div 上不起作用 class Hello extends React.Component { state = { openDrop
我希望按钮在通过 tab 键选择时具有发光效果。谁能帮我这个。代码片段将非常有帮助。 谢谢拉什米 最佳答案 如果您正在为现代浏览器开发,您可以使用 html5 框阴影和过渡: button{ bac
假设我有一个文本框的 onFocus 事件。正如预期的那样,当用户跳入该框时会触发该事件。但它似乎也像选择框时触发事件,然后通过切换选项卡,打开然后关闭另一个应用程序等覆盖然后打开窗口。有没有办法使事
与其他人一样,我们的网络应用程序中到处都有表单。 到目前为止,我们一直在大多数表单元素中使用以下(或一些变体): class="formThingy" onFocus="document.the
我想在我的注册表单上制作这种 Pinterest 效果 - 当用户关注输入文本字段或文本区域时,我希望该字段或区域周围有柔和的阴影,如下所示: 所以我尝试了以下 - 我写了一个 CSS 类 .inpu
Fiddle 所以我遇到了这个问题。 我有一个简单的表格: 还有这个脚本: function focus(element) { console.log('focused ' + el
我正在尝试在用户单击字段时向表单字段添加颜色边框,我擅长 html 和 javascript,还有一点 php,但我的 css 实际上很差。表单等的代码如下。如果有人可以指导或帮助我,我将不胜感激。代
我正在使用带有 LinearLayoutManager 的 RecyclerView 来填充对象的 ArrayList。我需要的是当我将焦点从一个项目切换到另一个项目时,如何实现 onFocus 事件
我是一名优秀的程序员,十分优秀!