我已经多次遇到这种情况,我希望在失败某些或其他验证(通常是更改或模糊)后,将焦点重置为(和/或选择内容)动态生成的元素,但我有从来没有想出一个满意的解决方案。为什么这不起作用? MyFiddle
jQuery(function(){
jQuery("body").append("<input type='text' id='test' size='5'/> <button>Go</button>");
jQuery('body').on('blur', '#test', function()
{ var test = jQuery(this).val();
if(test && !isNumber(test))
{ alert('Not a Number!');
jQuery(this).focus().select();
//jQuery('#test').focus().select();
}
});
});
function isNumber(n) {
return !isNaN(parseFloat(n)) && isFinite(n);
}
答案 0 :(得分:3)
您可以尝试使用setTimeout
功能:
$('#test').on('blur', function () {
var $this = $(this), test = this.value;
if (test && !isNumber(test)) {
setTimeout(function() {
$this.focus().select();
}, 4);
}
});
答案 1 :(得分:1)
如果您尝试这样做会发生什么:
$(function(){
$("body").append("<input type='text' id='test' size='5'/> <button>Go</button>");
$('#test').on('blur', function() {
if (isNaN(this.value)) {
alert('Not a Number!');
$(this).focus();
}
});
});
如果元素在用户切换出元素时没有值,则会将其聚焦并发出警报。这就是你想要的,不是吗?
答案 2 :(得分:0)
这样:
jQuery('body').on('blur', '#test', function()
应该是:
jQuery(document).on('blur', '#test', function()