我有一个带有文本输入字段 $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);
});