我有一个带有文本输入字段$ newItemField的列表,默认值=“ New Item”。通过单击输入按钮$ 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都不会显示任何值。换句话说,不单击添加按钮时,我缺少默认值“ New Item”。
$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);
});
您可以在焦点输出函数中使用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);
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句