0

我有一个带有文本输入字段 $newItemField 的列表,默认值 =“新项目”。通过单击输入按钮 $addButton 您可以将 $newItemField 的值添加到列表中。

当 .focusin $newItemField 我删除默认值 this.value = "";

当 .focusout 与 $newItemdField = "" 我将默认值重置为 $newItemField = "New Item"。两者都工作得很好。

我的问题是,如何将 .focusout 与特定输入字段的 .focusin 结合起来。换句话说,当 .focusout wuth $newItemField = "" 我只想在没有点击 $addButton 时重置默认值????

现在发生的情况是,当 $newItemField ="" 并单击 $addButton 时,.focusout 首先起作用($newItemField = "New Item"),然后我将一个名为“New Item”的项目添加到列表中。这就是我想防止发生的事情。

我尝试了很多使用 if 和 click(),但没有成功。我将不胜感激下面对我的代码的任何形式的支持。

$newItemField.each(function() {
    $(this).data('default', this.value);
})
.focusin(function() {
    if (this.value == $(this).data('default')) {
        this.value = '';    
    }
})
.focusout(function() {
    if  (this.value === ""){            
        this.value = $(this).data('default');      
    }

});

$addButton.click(function() {
    addItem();
    $newItemField.select();
});

在威廉的回答之后,我的变化如下。现在,无论 .activeElement 关注后,§newItemField 都不会显示任何值。换句话说,没有我在不点击添加按钮时错过了默认值“新项目”。

$newItemField.each(function() {
    $(this).data('default', this.value);
})
.focusin(function() {
    if (this.value == $(this).data('default')) {
        this.value = '';    
    }
})
.focusout(function() {

    setTimeout(function () {


    if ($(document.activeElement).attr('id')!==$('add')//the id of the add button is #add
        {

        if ($newItemField.value === ""){
            this.value = $(this).data('default');
        }             

    }
}, 100);



});
4

1 回答 1

0

您可以在 focusout 函数中使用 setTimeout 来检查按钮是否具有焦点,如果没有则仅更改值。

.focusout(function() {
    setTimeout(function () {
        if ($(document.activeElement).attr('id')!='$addButton')
        {
             //run code
             //remember 'this' no longer refers to $newItemField
        }
    }, 100);

});

试试这个:

.focusout(function() {
        setTimeout(function () {
            if ($(document.activeElement).attr('id') != ('add')) {
                {
                $(newItem).val('New Item');
                }

            }
        }, 100);


});
于 2014-05-18T21:36:56.797 回答