有条件地逃避模糊事件

时间:2019-02-16 20:01:24

标签: javascript angular

我有一个表格,其中每个单元格都是一个输入。 每个输入都有(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 {
        ...
      }
}

0 个答案:

没有答案