我希望将重点放在(Chrome,即6-10)或Firefox中的模糊事件中,了解哪些元素将成为焦点。 在Chrome和IE 11之前,可以使用以下代码:
$(input).focusout(function (event) {
"use strict";
console.log("next focused element: ", event.relatedTarget);
});
在Firefox中,可以使用以下代码:
$(input).blur(function (event) {
"use strict";
console.log("next focused element:", event.originalEvent.explicitOriginalTarget);
});
问题是IE 11.我在IE 11中找不到任何方法。有人为此找到了解决方案吗?
这是用ie11测试的小提琴。 http://jsfiddle.net/govanm/y87sekzd/5/
答案 0 :(得分:1)
我可以在评论中分享的JSFiddle上看到问题,我能够提出解决方案。
这种解决方法的想法是在focusout
发生之前,某些select / focus事件触发目标元素。所以我们可以通过使用一些辅助变量来跟踪它:
var nextElement = null;
$("input").on("select click mousedown pointerdown mspointerdown", function() {
nextElement = this;
});
我使用了在选择元素(使用鼠标或键盘)时触发的不同事件,这些事件发生在focusout
事件之前。
现在我们在当前元素的nextElement
事件中有focusout
,我们将检查event.relatedTarget
的值。如果它不为空(除了IE11之外),我们将使用它;如果它为空(IE11),我们将改为使用nextElement
变量:
var nextFocus = event.relatedTarget ? event.relatedTarget : nextElement;
$("#p1").append("<div>next focused element: " + nextFocus.id + "</div>");
这样我们就不会影响其他浏览器的行为,一旦IE11修复了你在评论中分享的know bug,它就会有效。
整个代码看起来像这样:
var nextElement = null;
$("input").on("select click mousedown pointerdown mspointerdown", function() {
nextElement = this;
});
$("input").focusout(function (event) {
"use strict";
var nextFocus = event.relatedTarget ? event.relatedTarget : nextElement;
$("#p1").append("<div>next focused element: " + nextFocus.id + "</div>");
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<table class="group">
<tbody>
<tr></tr>
<tr>
<td class="field_title">
<div class="widget_title widget_committed"><span id="sales_responsbile_part_last_name_field-title">* Last name:</span>
</div>
</td>
<td class="field_widget">
<div class="configurationWidget_configuration-custom-text-widget_0">
<div class="widget_input"><input type="text" name="sales_responsbile_part_last_name_field" value="gf" id="in1">
</div>
</div>
</td>
<td class="field_filler"></td>
</tr>
<tr>
<td class="field_title">
<div class="widget_title widget_committed"><span id="sales_responsbile_part_first_name_field-title">* First name:</span>
</div>
</td>
<td class="field_widget">
<div class="configurationWidget_configuration-custom-text-widget_0">
<div class="widget_input"><input type="text" name="sales_responsbile_part_first_name_field" value="hj" id="in2">
</div>
</div>
</td>
<td class="field_filler"></td>
</tr>
<tr>
<td class="field_title">
<div class="widget_title widget_committed"><span id="sales_responsbile_part_title_field-title">Title:</span>
</div>
</td>
<td class="field_widget">
<div class="configurationWidget_configuration-custom-text-widget_0">
<div class="widget_input"><input type="text" name="sales_responsbile_part_title_field" value="hj" id="in3"></div>
</div>
</td>
<td class="field_filler"></td>
</tr>
<tr>
<td class="field_title">
<div class="widget_title widget_committed"><span
id="sales_responsbile_part_phone_field-title">* Phone:</span></div>
</td>
<td class="field_widget">
<div class="configurationWidget_configuration-custom-text-widget_0">
<div class="widget_input"><input type="text" name="sales_responsbile_part_phone_field" value="jhjh" id="in4">
</div>
</div>
</td>
<td class="field_filler"></td>
</tr>
<tr>
<td class="field_title">
<div class="widget_title widget_committed"><span
id="sales_responsbile_part_mobile_field-title">Alt. phone:</span></div>
</td>
<td class="field_widget">
<div class="configurationWidget_configuration-custom-text-widget_0">
<div class="widget_input"><input type="text" name="sales_responsbile_part_mobile_field" value="hjh" id="in5">
</div>
</div>
</td>
<td class="field_filler"></td>
</tr>
<tr>
<td class="field_title">
<div class="widget_title widget_committed"><span
id="sales_responsbile_part_email_field-title">* E-mail:</span></div>
</td>
<td class="field_widget">
<div class="configurationWidget_configuration-custom-text-widget_0">
<div class="widget_input"><input type="text" name="sales_responsbile_part_email_field" value="hjh" id="in6">
</div>
</div>
</td>
<td class="field_filler"></td>
</tr>
<tr>
<td class="field_title">
<div class="widget_title widget_committed"><span id="sales_responsbile_part_sales_channel_field-title">Sales channel:</span>
</div>
</td>
<td class="field_widget">
<div class="configurationWidget_configuration-custom-text-widget_0">
<div class="widget_input"><input type="text" name="sales_responsbile_part_sales_channel_field"
value="hjh" id="in7"></div>
</div>
</td>
<td class="field_filler"></td>
</tr>
<tr>
<td class="field_title">
<div class="widget_title widget_committed"><span
id="sales_responsbile_part_sales_responsbile_segment_field-title">Sales responsible segment:</span>
</div>
</td>
<td class="field_widget">
<div class="configurationWidget_configuration-custom-text-widget_0">
<div class="widget_input"><input type="text"
name="sales_responsbile_part_sales_responsbile_segment_field"
value="jhjh" id="in8"></div>
</div>
</td>
<td class="field_filler"></td>
</tr>
<tr>
<td class="field_title">
<div class="widget_title widget_committed"><span id="sales_responsbile_part_sales_team_field-title">Sales team:</span>
</div>
</td>
<td class="field_widget">
<div class="configurationWidget_configuration-custom-text-widget_0">
<div class="widget_input"><input type="text" name="sales_responsbile_part_sales_team_field" value="hjh" id="in9">
</div>
</div>
</td>
<td class="field_filler"></td>
</tr>
</tbody>
</table>
<p id="p1">Test</p>
&#13;
你可以在这个JSFiddle上看到它:http://jsfiddle.net/y87sekzd/7/