.focus()无法在.focus()事件中工作

时间:2013-06-19 23:18:27

标签: javascript jquery

我无法在同一元素上成功使用focusout事件中的.focus()。我也尝试过使用setTimeout。有什么想法吗?

    $(control).focusout(function (e) {
                    if ($(this).val().length > 0) {
                        for (var ii = 0; ii < sampleDTOList.length; ii++) {
                            if (sampleDTOList[ii]["controlId"] == $(this).attr("id")) {
                                if ($(this).val() <= parseFloat(sampleDTOList[ii]["maxValue"]) && $(this).val() >= parseFloat(sampleDTOList[ii]["minValue"])) {
                                    sampleDTOList[ii]["value"] = $(this).val();
                                    RunRulesOnSample(sampleDTOList[ii]);
                                    return;
                                }
                                else {
                                    $(this).val("");
                                    alert("You must enter a value between " + sampleDTOList[ii]["minValue"] + " and " + sampleDTOList[ii]["maxValue"] + ".");
                                    $(this).focus();
                                    return;
                                }
                            }
                        }
                    }
                });

1 个答案:

答案 0 :(得分:0)

我认为不可能在focusout事件处理程序上直接调用focus函数。此外,您不能对事件对象说preventDefault(),因为focusout事件不可取消。

但似乎你可以使用setTimeout函数:

$('#foo').focusout(function(e) {
    setTimeout(function() {
        $('#foo').focus();
    }, 10);
});

查看此jsFiddle

您还可以找到使用mousedown事件here

的变通方法