2016-04-22 118 views
0

我有一個下拉被叫網絡。對於特定的網絡,我們可以輸入合同數量。假設我們爲網絡輸入3合同。如果用戶錯誤地改變了下拉,那麼所有3個合同將被清除。防止更改事件的默認值

所以我想要做的是給出一個警告對話框確定或取消。如果他們點擊確定,則從下拉列表中選擇新的網絡,並且如果他們單擊取消則所有合同都將被清除,並且不會有任何更改。

我想使用e.PreventDefault()並將其放置在警告對話框之前。但是,即使在警告對話框彈出之前,下拉項目也會被更改。由於它是下拉變化事件,e.PreventDefault不起作用。

任何人都可以請幫助我。

function networkIdChangeEvent(event) { 
    if (atLeastOneContract()) { 
    event.preventDefault(); 
    showWarningDialog(closeDialogMsg, okFunction, cancelFunction) 
    } 
} 
+3

請顯示您的代碼 – DelightedD0D

+0

您能顯示實際的事件處理程序嗎?這似乎是它所調用的功能,你怎麼稱呼它? – DelightedD0D

+1

請閱讀如何創建[mcve] – j08691

回答

0

你可以嘗試,而不是

返回假

,應該在一個事件監聽,如果jQuery的事件處理工作。如果非Jquery事件則注意:preventDefault()方法不會阻止通過DOM進一步傳播事件。使用stopPropagation()方法來處理這個問題。

+1

onchange是不可取消的事件,因此返回false,stopPropagation()和preventDefault()將無濟於事。 :( –

0

試試這個辦法:

<script> 
    window.onload = function() { 
     (function() { 
      for (var i = 0, n = arguments.length; i < n; i++) { 
       var elem = document.getElementById(arguments[i]); 
       elem.prevValue = elem.value; 
       elem.onchange = function (e) { 
        console.log('prev ' + this.id + '; ' + this.prevValue); 
        var ok = confirm('Are you sure?'); 
        if (ok) 
         this.prevValue = this.value; 
        else 
         this.value = this.prevValue; 
        console.log('new ' + this.id + '; ' + this.prevValue); 
       } 
      } 
     })('sel', 'sel1'); 
    } 
</script> 

您的下拉列表:

<select id="sel"> 
     <option value="-1">select</option> 
     <option value="1">one</option> 
     <option value="2">two</option> 
    </select> 
    <select id="sel1"> 
     <option value="-1">select</option> 
     <option value="1">one</option> 
     <option value="2">two</option> 
    </select> 

我希望這個想法將是有益的。