2011-09-28 75 views
1

我有一個jQuery對話框和一個asp.net按鈕(刪除)。當點擊刪除按鈕時,我想讓對話框打開一個確認窗口,說'你確定要刪除這條記錄嗎?'。當用戶點擊是,我想恢復asp.net回發。這裏是我到目前爲止的代碼:如何單擊asp.net按鈕打開jQuery對話框,然後在單擊是時恢復默認?

$("#dialog-delete").dialog({ 
     autoOpen: false, 
     height: 200, 
     width: 400, 
     modal: true, 
     resizable: false, 
     buttons: { 
      'Cancel': function() { 
       $(this).dialog('close'); 
      }, 
      'Yes': function() { 
       $(this).dialog('close'); 
       //__doPostBack('ctl00$cp1$btnDelete',''); 
      } 
     }, 
     open: function() { 
      $(":button:contains('Yes')").addClass("red"); 
     } 
    }); 
    $("[id*=btnDelete]").live('click', function (e) { 
     e.preventDefault(); 
     $("#dialog-delete").dialog('open'); 
    }); 

所以我停止與的preventDefault回發的對話框打開並顯示消息,但我不能刪除火沒有硬編碼的刪除按鈕,這是骯髒的。無論如何,我可以保持點擊事件,而對話框顯示,並呼籲preventDefault取消和繼續是?

+0

您可以在一行代碼中使用JavaScript來完成。 lbtnDelete.Attributes.Add(「onclick」,「return confirm('你確定要刪除這條記錄嗎?');」); – Win

+0

是的,但使用瀏覽器確認。我們在整個應用程序中使用jQuery對話框作爲標準,我必須保持一致。到目前爲止,我們還沒有需要以這種方式繼續以這種方式進行回傳(而且我們對回發呼叫進行了硬編碼 - 這就像我說的那樣令人討厭)。 – lloydphillips

回答

2

您可以將實時事件類型更改爲mouseup而不是單擊,然後使用click事件觸發回發。

$("[id*=btnDelete]").live('mouseup', function (e) { ... 

... 

$("[id*=btnDelete]").click(); 

編輯(基於評論)

又一想,你可以與處理click事件,並在刪除確認原來的想法堅持調用.die()函數刪除直播事件處理程序以前連接,使您可以撥打.click()並導致回發。

可以調用.die()函數,就像這樣:

$("#dialog-delete").dialog({ 
    autoOpen: false, 
    height: 200, 
    width: 400, 
    modal: true, 
    resizable: false, 
    buttons: { 
     'Cancel': function() { 
      $(this).dialog('close'); 
     }, 
     'Yes': function() { 
      $(this).dialog('close'); 
      $("[id*=btnDelete]").die('click'); 
      $("[id*=btnDelete]").click(); 
     } 
    }, 
    open: function() { 
     $(":button:contains('Yes')").addClass("red"); 
    } 
}); 

$("[id*=btnDelete]").live('click', function (e) { 
    e.preventDefault(); 
    $("#dialog-delete").dialog('open'); 
}); 
+0

我會嘗試它,但我有2個刪除按鈕在我的網格的頂部和底部。現在我將簡化爲一個按鈕。但有了2個按鈕,jQuery/javascript會拋出一個咆哮,如果它帶有與我的選擇器相匹配的2個元素,我嘗試調用click方法?有一個更加優秀的解決方案會很好,所以我可以通過將事件參數傳遞給對話框或類似的東西來確定哪個按鈕被點擊了。感謝您的迴應。 – lloydphillips

+0

好吧,mousedown(儘管有preventDefault)仍然會觸發回傳。 :s要嘗試mouseup。 – lloydphillips

+0

mouseup工作,但不得不修改我的代碼來選擇第一個按鈕,當它返回我的選擇器中的2個匹配按鈕。儘管如此,仍然支持更清潔的解決方案。將在下面發佈我的代碼作爲答案。 – lloydphillips

0

提交ASP.NET表單點擊相應的按鈕時。

... 
buttons: { 
     'Cancel': function() { 
      $(this).dialog('close'); 
     }, 
     'Yes': function() { 
      $(this).dialog('close'); 
      $('#aspnetForm').submit(); // you may need to use a different selector based on your form name 
     } 
    } 
+0

以這種方式提交表單不會爲調用者提供代碼隱藏,我需要觸發回發(但是我也需要調用項目的id--這幾乎是我的問題所在)。 – lloydphillips

0

我得到了這個工作,但我不喜歡目前的解決方案。我更喜歡一個更清潔的解決方案,我可以通過單擊按鈕捕獲事件,並以某種方式將其傳遞到對話框中(如果可能的話)。所以我堅持並希望有人有更好的答案。我的代碼,得到它的工作(現在)是:

$("#dialog-delete").dialog({ 
    autoOpen: false, 
    height: 200, 
    width: 400, 
    modal: true, 
    resizable: false, 
    buttons: { 
     'Cancel': function() { 
      $(this).dialog('close'); 
     }, 
     'Yes': function() { 
      $(this).dialog('close'); 
      $("[id*=btnDelete]")[0].click(); 
      //__doPostBack('ctl00$cp1$btnVoid',''); 
     } 
    }, 
    open: function() { 
     $(":button:contains('Yes')").addClass("red"); 
    } 
}); 
$("[id*=btnDelete]").live('mousedown', function (e) { 
    e.preventDefault(); 
    $("#dialog-delete").dialog('open'); 
}); 

基於上面@jdavies的幫助(和我的意見,加強答案)。我將按鈕處理程序更改爲mousedown事件,並在「是」按鈕處理程序中觸發了單擊事件。

我想知道如果用戶通過鍵盤觸發按鈕會發生什麼,這是我感到噁心的原因之一。 :)

捧出來的東西更好,但它的運行至少...

+1

因爲這樣的問題,我已經使用ASP.NET WebForms進行了切換。我總是發現要完全控制用戶體驗,它需要很多雜亂的代碼。你可能不應該有2個控件具有相同的ID(btnDelete)。我會讓他們btnDeleteTop&btnDeleteBottom什麼的。如果你想要的話,你可以處理keydown並檢查ENTER鍵以及哪個控件具有焦點,但是會很快變得雜亂無章。祝你好運! – Terry

+0

他們被命名爲btnDeleteTop&btnDeleteBottom,我使用的jQuery選擇器是兩個工作的捕獲。我在我的項目中使用MVC也在家裏,我工作的公司正在慢慢地使用它,但我現在用webforms停留在asp.net 2(delphi)中。 :( – lloydphillips

相關問題