jquery将焦点设置为动态生成的元素

时间:2013-01-26 14:08:05

标签: jquery setfocus dynamic-content

我已经多次遇到这种情况,我希望在失败某些或其他验证(通常是更改或模糊)后,将焦点重置为(和/或选择内容)动态生成的元素,但我有从来没有想出一个满意的解决方案。为什么这不起作用? MyFiddle

jQuery(function(){
    jQuery("body").append("<input type='text' id='test' size='5'/>&nbsp;&nbsp;<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);
}

3 个答案:

答案 0 :(得分:3)

您可以尝试使用setTimeout功能:

$('#test').on('blur', function () {
    var $this = $(this), test = this.value;
    if (test && !isNumber(test)) { 
         setTimeout(function() {
            $this.focus().select();
         }, 4);
    }
});

http://jsfiddle.net/tFAaf/

答案 1 :(得分:1)

如果您尝试这样做会发生什么:

$(function(){
    $("body").append("<input type='text' id='test' size='5'/>&nbsp;&nbsp;<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()