2015-12-23 110 views
2

我使用表單和一些必填字段創建離子應用程序。

當表單被提交時,如果它無效,我使用Ionic的$ ionicPopup服務顯示一條警報消息。

我的問題是:用戶可以按下「ENTER」或(在Android內的「Go」按鈕)來調用表單提交併關閉導致另一個彈出窗口打開的彈出窗口。

你可以看到這個發生在這裏:

Sample Code

焦點輸入,按ENTER鍵並顯示錯誤消息時,再次按ENTER鍵關閉它。另一個彈出窗口將打開(很可能是因爲背景背後的輸入仍然有焦點,或者可能是因爲模式是在表單內創建的 - 使ENTER再次提交提交)。

有什麼辦法可以避免這種行爲?也許在$ ionicPopup中的ENTER會在不提交表單的情況下關閉它,或者至少有一些代碼在顯示新的表單之前關閉任何活動的彈出窗口?因爲當您打開多個彈出窗口時,如果您嘗試使用鼠標(或點擊)關閉消息,系統會提示用戶關閉所有其他對話框,然後再將其發送回主屏幕。

我知道我可以嘗試獲取對彈出窗口的引用並調用close()方法,但它對我來說並不適用。最終,新警報在前一個完全關閉之前打開,並且背景永遠卡在屏幕上。

感謝您的幫助。

+0

你需要從控制失去焦點,所以當按下輸入將回應僅警告 –

+0

我已經發現它不起作用。事實證明,實際的問題是彈出不能通過按回車來關閉。當我第二次按下輸入時,我實際上再次提交表單。因此打開另一個彈出。而我正在努力將焦點從表單中移除,因爲除了表單控件(例如登錄頁面)之外,我的頁面沒有任何可見的控件。 –

回答

1

事實證明,我的實際問題是,$ ionicPopup不支持按下ENTER鍵(或在Android鍵盤上的「去」)關閉彈出窗口。出於某種原因,我試圖將注意力放在輸入之外,但它不起作用。

對於任何有同樣問題的人,我最終創建了一個角度指令來在表單提交時關閉設備鍵盤。

這裏的指令代碼:

(function() { 
    'use strict'; 

    angular 
     .module('myModule') 
     .directive('closeKeyboardOnSubmit', closeKeyboardOnSubmit); 

    closeKeyboardOnSubmit.$inject = ['$ionicPlatform', '$cordovaKeyboard']; 

    function closeKeyboardOnSubmit($ionicPlatform, $cordovaKeyboard) { 

     var directive = { 
      require: '^form', 
      restrict: 'A', 
      link: link 
     }; 

     return directive; 

     function link (scope, element) { 
      element.on("submit", function(){ 
       $ionicPlatform.ready(function(){ 
        $cordovaKeyboard.close(); 
       }); 
      }); 
     } 
    } 

})(); 

然後我用它在這樣的表單標籤:

<form close-keyboard-on-submit ...> 

顯然,問題還是直接在瀏覽器中測試時發生,但部署到時工作設備。

+0

我認爲你不需要在代碼中使用平臺。它會執行每一次,而不是你的app.js一旦你包含該鍵盤實例,你可以在整個過程中使用它,你可以檢查是否顯示鍵盤然後隱藏。 另外,我們可以使用單個可用於多個彈出窗口的實例,隱藏第一個實例並通過分配新實例來打開其他實例。記住,當控制器範圍被破壞時,總是關閉任何彈出窗口,彈出窗口。 –

相關問題