2016-04-22 157 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> 

我希望这个想法将是有益的。