假设我这样做:
$(target).blur(function(e){
//do stuff
});
Run Code Online (Sandbox Code Playgroud)
有没有办法获取被点击的对象以触发模糊操作?
我尝试使用e.target,但这似乎是返回附加到模糊操作的对象而不是单击的对象.
我在页面上有一个div,显示有关特定类别(图像,名称等)的一些信息.
当我点击编辑图像时,它会将类别置于编辑模式,这样我就可以更新名称.从下图中可以看出,它显示"Soup"当前处于编辑模式,其他处于正常视图模式.这一切都按预期工作,取消/保存按钮做正确的事情.(我尝试添加图像,但不会让我,需要更多的爱)
然而,一旦处于编辑模式,如果我点击页面上的任何其他位置(div之外),预期结果将是汤类别将返回查看模式.在某种事件发生后,这也应该让我问他们是否想要保存更改.
所以我接下来决定在"汤"父div上创建一个模糊事件.如果我单击页面上的任何位置,这将按预期工作,但是如果我单击div的内部元素,它也会导致父模糊事件被触发,从而导致类别返回到查看模式.
那么,有没有办法阻止父div在其任何一个子节点获得焦点时触发模糊事件?
<div tabindex="-1" onblur="alert('outer')">
<input type="text" value="Soup" />
</div>
Run Code Online (Sandbox Code Playgroud)
我只是在没有编译器的情况下编写代码,所以不确定这是否有效,但希望你能得到这个想法.
我正在使用Knockout.js动态更新GUI,但这不应该影响这个我不会想到的答案.
这个问题曾经在这里提出过,但几年前,当时没有跨平台的解决方案(除了setTimeout解决方案,这真的不是很方便).
我想做,onblur="foo(parm);"并且foo能够确定哪个元素现在具有焦点.
我正在使用常规的javascript; 请不要这个jQuery.
这些天有可能吗?
有没有人有一种技术可以让我在模糊事件后确定哪个元素有焦点?我有一个输入字段,我想在模糊时重置,除非模糊是由用户点击"保存"按钮引起的.我只想在保存按钮的onclick功能中设置一个标志,但是这样会触发太晚(除非点击事件总是在模糊事件之前触发,我怀疑.)
下面是我正在使用的输入下拉列表的简化版本.
它的作用的基本概要是:如果您专注于输入,则会出现一个下拉列表.如果单击下拉列表中的某个选项,该选项将填充输入并且下拉列表将消失.这是使用取得了onfocus和功能我叫dropdown();和undropdown();.
我处于两难境地,当有人点击其他地方时,我无法让下拉消失.如果我使用onblur它,它会成功隐藏下拉列表,但如果你单击一个选项它不会填充输入,这是因为,该onblur函数首先运行,因此,该input();函数不会运行,因为下拉列表已经隐藏.
如果你onclick在body标签或其他父标签上放置一个,它会认为onfocus是一个click,它运行的是dropdown();函数,然后是undropdown();函数,因此函数重叠后永远不会出现下拉列表.
我很感激帮助找出如何订购功能,以便它们以正确的顺序执行而不会相互重叠.
function input(pos) {
var dropdown = document.getElementsByClassName('drop');
var li = dropdown[0].getElementsByTagName("li");
document.getElementsByTagName('input')[0].value = li[pos].innerHTML;
undropdown(0);
}
function dropdown(pos) {
document.getElementsByClassName('content')[pos].style.display = "block"
}
function undropdown(pos) {
document.getElementsByClassName('content')[pos].style.display = "none";
}Run Code Online (Sandbox Code Playgroud)
.drop {
position: relative;
display: inline-block;
vertical-align: top;
overflow: visible;
}
.content {
display: none;
list-style-type: none;
border: 1px solid #000; …Run Code Online (Sandbox Code Playgroud)我需要检索导致来自WITHIN模糊事件的焦点(模糊)事件的DOM元素.下面的代码将为我提供失去焦点的元素的ID,而不是导致元素失去焦点的元素.这是我需要的第二个元素.
.live('blur', function(e) {
var id = $(this).attr('id');
}
Run Code Online (Sandbox Code Playgroud)
如何获取导致模糊的元素,而不是模糊附加到的元素?我能想到的唯一方法是捕获window.click事件,然后处理我需要的逻辑,但这会变得棘手,所以我希望有一种方法可以从blur事件中获取DOM元素.
我有一个简单的饼图,使用svg及其子元素进行渲染.我的目的是让饼图的每个楔形都具有键盘焦点.这通常通过简单地向目标元素添加tabindex ="0"属性来完成.
将饼图设置为可聚焦:
d3.selectAll('.nv-slice > path').attr("tabindex", "0");
Run Code Online (Sandbox Code Playgroud)
如果您尝试使用Chrome"拼贴"到饼图,它会按照我的预期运行.
问题是饼图不会在IE或Firefox中得到关注.知道为什么会这样吗?如何让这些饼图楔形具有焦点?如果没有办法创作这个,也许有一个解决方法?这里的结尾是找到一个解决方案,我可以使用键事件来触发工具提示.
我正在触发一些文本框的onblur()代码.但是如果用户点击取消按钮导致onblur(),我想做一些不同的事情.在onblur()事件处理函数中是否有一种方法可以知道控件是什么,即将获得焦点并进行相应的反应?
-约瑟夫
非常简单.我有一个用于触发函数的blur()事件处理程序,我想要在单击某个元素触发模糊时不触发该函数.
我尝试了document.activeElement,但我获得了一个HTMLBodyElement而不是我点击的元素.
码:
$j(".input_filtrare_camp").blur(
function(event) {
nr_img = this.parentNode.id.split("_")[1];
//alert(document.activeElement);
if(document.activeElement.id.indexOf("img_exact") < 0) //run only if the id of the element I clicked on doesn't contain "img_exact"
enter_input_filtrare(event.target);
});
Run Code Online (Sandbox Code Playgroud)
当然,警报用于故障排除.
我使用techfoobar的解决方案如下:
var currElem = null;
$(document).mousedown(function(e) {
currElem = e.target;
});
$j(".input_filtrare_camp").blur(
function(event) {
nr_img = this.parentNode.id.split("_")[1];
if(currElem.id.indexOf("img_exact") < 0) //run only if the id of the element I clicked on doesn't contain "img_exact"
enter_input_filtrare(event.target);
});
Run Code Online (Sandbox Code Playgroud)
查看PointedEars的答案,了解有关此问题的一些重要信息.