簡體   English   中英

Angular - 事件發生后重新觸發事件 event.preventDefault()

[英]Angular - Re-trigger event after event has been event.preventDefault()

我在我的應用程序中使用帶有PrimeNG Angular 12來實現custom confirm()函數。 用例如下:

當用戶單擊表單上的任何復選框或單選按鈕時,在事件觸發之前,應顯示確認消息,詢問用戶是否真的想要繼續

為了實現這一點,我使用event.preventDefault(); 首先阻止選擇,然后如果用戶在自定義確認消息上單擊“是”,我想重新觸發剛剛阻止的事件 下面的代碼示例:

復選框更改

onCheckboxChange(event: Event) {
   event.preventDefault(); // prevent the default click in the first place

   this.openConfirmDialog( () => {
     // re-trigger event here, for example 'event.trigger();'
  }, event);
}

打開確認對話框

openConfirmDialog(acceptAsync: any, event: Event) {
    this.confirmationService.confirm({
    message: 'Are you sure you want to make this change? Progress will be lost',
    accept: () => {
    //Actual logic to perform a confirmation
    acceptAsync();
   },
   reject: () => {
    event.preventDefault();
   }
});

}

對於這個用例,我是否在“正確的道路”上? 我知道我可以專門為每種情況設置檢查值,如果它是一個復選框,例如:

this.event.currentTarget.checked = true;

或者相應地,如果它是一個單選按鈕,但我想以“通用方式”實現它,有什么想法嗎?

提前致謝!

解決了

之后,我所做的是在openConfirmDialog()函數中傳遞調用單擊事件的目標元素,然后在confirmationService 的accept事件上,我手動重新單擊()輸入元素。 對於這個功能,我們需要引入一個boolean flaglet fromManualClick = false

代碼解決方案

onCheckBoxChange

onCheckboxChange(event: Event) {
  if(fromManualClick){
    event.preventDefault(); // prevent the default click in the first place

    this.openConfirmDialog( () => {
    // my logic here
    }, (event.currentTarget as HTMLInputElement));
  }
  fromManualClick = false;
}

打開確認對話框

openConfirmDialog(acceptAsync: any, srcElement: HTMLInputElement) {
  this.confirmationService.confirm({
  message: 'Are you sure you want to make this change?',
  accept: () => {
    acceptAsync();
    //re-trigger the click element
    fromManualClick = true;
    srcElement.click();
  },
  reject: () => {

  }
 });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM