JQuery - 元素不可聚焦的错误/如何强制模糊?

时间:2011-09-29 19:07:40

标签: javascript jquery

我有一个html表单,它使用jquery焦点和模糊来清除和恢复一些预设的字段文本。但是,表单位于模态对话框中,可以使用jquery hide()和show()隐藏和显示。但是,当窗体被隐藏时,它会抛出一个javascript错误:

an invalid form control with name = 'email' is not focusable

我假设这是因为表单已隐藏且无法访问。有没有办法强制模糊事件?或者某种方法来解决这个错误?这是我的代码:

$j('.dField').focus(function(){
    clearInput($j(this)[0]); //The [0] seems to be necessary to retrieve the element at the DOM object level
});
$j('.dField').blur(function(){
    restoreInput($j(this)[0]);
});

function clearInput(textField) {
    if (textField.value == textField.defaultValue) {
        textField.value = "";
     }
}

//Restores the default value
function restoreInput(textField){
    if (textField.value == ""){
        textField.value = textField.defaultValue;
    }
}

$j('#dFormBack').click(function(){
        $j('#dContentContainer').show();
        $j('#vehicle_form').hide();
    });

3 个答案:

答案 0 :(得分:1)

您可以在blur事件监听器中激活该功能,而不是尝试启动模糊事件。

restoreInput($j(".dfield")[0]);

附注,你的第一行可以更有效地写出:

$j('.dField').focus(function(){
    clearInput(this);
}).blur(function(){
    restoreInput(this);
});
事件处理程序中的

this引用事件侦听器附加到的DOM元素。不必将this包装在JQuery包装器中,并使用[0]再次获取DOM元素。

答案 1 :(得分:1)

如上所述here

  

触发对隐藏元素的关注会导致Internet Explorer出错。注意只在没有参数的情况下调用.focus()可见元素。

因此,您应该在调用focus()

之前检查元素是否隐藏

答案 2 :(得分:0)

你是对的。如果某些内容不可见,则无法focus()'或blur()'。