我有一个表格,其中每个单元格都是一个输入。 每个输入都有(blur)=“ updateCell()”事件。我用它来更新从中移出焦点的单元格。 我的单元格之一是使用变体进行搜索。每个变体都有(click)=“ variantSelected()”侦听器。 显然,当我单击变体模糊函数时,首先会调用它,此时所选的变体是不确定的。
我需要模糊以跟踪焦点已从输入中移出。我还使用它来检查该值是否有效(例如,该用户确实选择了一个变体,而不仅仅是输入了“ sdfkljsadflkj; sdf”之类的随机值)
因此,如果未选择值,则改为放置初始值。
我试图从variantSelected()调用updateCell()并传递选定的变量。 但是,模糊事件首先触发updateCell,并且变量未定义。 因此,在第一次调用updateCell()时,我有变体undefined,我不知道它是 undefined是因为用户刚刚离开了,还是因为定义了variant而未定义它是但首先触发了模糊事件再次 我猜最好的选择是单击搜索变体之一时以某种方式取消模糊事件。但是我不知道如何在有角度的甚至普通的js中做到这一点。
<input
#tenant
class="form-control"
type="text"
(focus)="onSetCurrentCell( ('current_tenant-' + property.id), $event )"
(keyup)="changeValue(property.id, 'current_tenant', $event)"
(blur)="updateList(property.id, 'current_tenant', $event)"
[value]="property.current_tenant?.name"
placeholder="Search..."
>
<div
class="tenants-variants"
[class.hidden]="variantsHidden"
*ngIf="cellUnderEdit === 'current_tenant-' + property.id"
>
<p
class="tenant-variant"
*ngFor="let tenantVariant of tenantsVariants"
(click)="onSelectTenantVariant(tenantVariant, tenant);">
{{tenantVariant.name}}
</p>
</div>
在我的.ts文件中
onSelectTenantVariant(tenantVariant: ITenantVariant, tenantRef) {
...some code
this.updateList(propertyId, columnProperty, null, tenantVariant);
}
updateList(propertyId: number, columnProperty: string, event?: any, tenantVariant?: ITenantVariant) {
this.editingStatusChanged.emit({isEditing: true});
if (columnProperty === 'current_tenant') {
// variant will be undefined at first call even if varaint was selected.
// because updateList is called before onSelectTenantVaraint()
if (variant) {
this.updatedPropertiesObject[propertyId] = {
['property_id']: propertyId,
...this.updatedPropertiesObject[propertyId],
...{[columnProperty]: variant.id}
};
}else {
...
}
}