Firefox focus() 设置焦点并立即模糊
Firefox focus() sets the focus and blurs immediately
我有一个 <span class="numbers">
,此代码用于点击,它创建一个新的 <input class="number_input">
字段并将焦点设置在它上面:
$('body').on('click','.numbers', function () {
oldNumbersValue = $(this).html();
var input = $('<input />', {'style':'font-size:30pt','type': 'number','class':'number_input', 'name': 'aname', 'value': oldNumbersValue});
$(this).parent().append(input);
input.focus();
});
当字段失去焦点时,它会被移除:
$('body').on('blur', '.number_input',function () {
// do something
$(this).remove();
});
这在 Chrome 中有效,但在 Firefox 中无效!在 Firefox 中,它创建字段,将焦点设置在它上面并立即失去它!
有什么解决办法吗?
编辑:
在 chorme/not 工作 在 ff fiddle:
https://jsfiddle.net/v8hmpgv2/
这里的问题是(由于我不是 100% 确定的原因),Firefox 在将元素附加到文档后触发了 .number_input
上的 blur
事件,但在您的 focus()
实际调用之前。
您可以通过此 JSFiddle demo 在 Firefox 中看到这种情况 - 请注意消息的顺序,指示何时在 .number_input
上设置和丢失焦点。
您可以修改代码的一种方法是不使用事件委托,而是将 blur
处理程序直接附加到 .number_input
:
$('body').on('click', '.numbers', function (e) {
oldNumbersValue = $(this).text();
var input = $('<input />', {
'style': 'font-size:30pt',
'type': 'number',
'class': 'number_input',
'name': 'aname',
'value': oldNumbersValue
});
$(this).parent().append(input);
input.focus();
input.blur(function(){
$(this).remove();
});
});
这里有一个 working JSFiddle to demonstrate. (Don't worry about any potential memory leakage due to constantly adding new event handlers - the jQuery docs 表示 .remove()
应该每次都删除它们。)
希望对您有所帮助!如果您有任何问题,请告诉我。
我有一个 <span class="numbers">
,此代码用于点击,它创建一个新的 <input class="number_input">
字段并将焦点设置在它上面:
$('body').on('click','.numbers', function () {
oldNumbersValue = $(this).html();
var input = $('<input />', {'style':'font-size:30pt','type': 'number','class':'number_input', 'name': 'aname', 'value': oldNumbersValue});
$(this).parent().append(input);
input.focus();
});
当字段失去焦点时,它会被移除:
$('body').on('blur', '.number_input',function () {
// do something
$(this).remove();
});
这在 Chrome 中有效,但在 Firefox 中无效!在 Firefox 中,它创建字段,将焦点设置在它上面并立即失去它!
有什么解决办法吗?
编辑:
在 chorme/not 工作 在 ff fiddle: https://jsfiddle.net/v8hmpgv2/
这里的问题是(由于我不是 100% 确定的原因),Firefox 在将元素附加到文档后触发了 .number_input
上的 blur
事件,但在您的 focus()
实际调用之前。
您可以通过此 JSFiddle demo 在 Firefox 中看到这种情况 - 请注意消息的顺序,指示何时在 .number_input
上设置和丢失焦点。
您可以修改代码的一种方法是不使用事件委托,而是将 blur
处理程序直接附加到 .number_input
:
$('body').on('click', '.numbers', function (e) {
oldNumbersValue = $(this).text();
var input = $('<input />', {
'style': 'font-size:30pt',
'type': 'number',
'class': 'number_input',
'name': 'aname',
'value': oldNumbersValue
});
$(this).parent().append(input);
input.focus();
input.blur(function(){
$(this).remove();
});
});
这里有一个 working JSFiddle to demonstrate. (Don't worry about any potential memory leakage due to constantly adding new event handlers - the jQuery docs 表示 .remove()
应该每次都删除它们。)
希望对您有所帮助!如果您有任何问题,请告诉我。