2017-09-25 56 views
0

我需要检索选中的单选按钮的值并将其作为参数发送到窗体。我写了下面的代码块,但每次只传递第一个值。有人可以帮忙吗?ExtJS单选按钮值检索

Ext.onReady(function() { 
Ext.getCmp('myButton').setHandler(function(){ 

    Ext.MessageBox.show({ 
     title: 'Hello', 
     msg:  'Please choose one? <br></br> Select: '+ 
     '<input type="radio" name="newrate" value="Yes" checked /> Yes'+ 
     '<input type="radio" name="newrate" value="No" /> No', 
     buttons: Ext.MessageBox.OKCANCEL, 
     fn: function(btn) { 
      if(btn == 'ok') { 
       alert(Ext.get('newrate').getValue()); 
        var form = Ext.getCmp("MyForm").getForm(); 
        form.getEl().dom.action="${pageContext.request.contextPath}/peer.online.MyForm.grid.action?mode=StornoDX&value="+Ext.get('newrate').getValue(); 
        form.getEl().dom.method="POST"; 
        form.getEl().dom.submit(); 
       } 
     } 
    }); 
}); 
}); 

回答

0

首先,其不是一个ExtJS的单选按钮Ext.get()用于获取HTML元素id作为它的输入。在你的情况下,它的html元素名称为"newrate"。所以,你可以使用检查单选按钮的值(对于浏览器> IE8document.querySelector(),就像这样:

document.querySelector('[name=newrate]:checked').value 

样的工作代码:对于浏览器> IE8

Ext.application({ 
 
     name: 'Fiddle', 
 

 
     launch: function() { 
 
     Ext.MessageBox.show({ 
 
     title: 'Hello', 
 
     msg:  'Please choose one? <br></br> Select: '+ 
 
     '<input type="radio" name="newrate" value="Yes" checked /> Yes'+ 
 
     '<input type="radio" name="newrate" value="No" /> No', 
 
     buttons: Ext.MessageBox.OKCANCEL, 
 
     fn: function(btn) { 
 
      if(btn == 'ok') { 
 
       alert(document.querySelector('[name=newrate]:checked').value); 
 
        
 
       } 
 
     } 
 
    }); 
 
     } 
 
     });
<link rel="stylesheet" href="https://cdn.sencha.com/ext/gpl/4.1.1/resources/css/ext-all.css"> 
 
<script type="text/javascript" src="https://cdn.sencha.com/ext/gpl/4.1.1/ext-all-debug.js"></script>

由于IE8以下浏览器不支持:checked CSS3 s选民。因此,我们需要遍历所有的单选按钮,并找到检查单选按钮,并得到其数值:

var buttons = document.getElementsByName("newrate"); 
    for(var i = 0; i < buttons.length; i++) {   
     if(buttons[i].checked) { 
     alert(buttons[i].value); 
     break; 
     } 
    } 

样的工作代码:对于所有浏览器

Ext.application({ 
 
     name: 'Fiddle', 
 

 
     launch: function() { 
 
     Ext.MessageBox.show({ 
 
     title: 'Hello', 
 
     msg:  'Please choose one? <br></br> Select: '+ 
 
     '<input type="radio" name="newrate" value="Yes" checked /> Yes'+ 
 
     '<input type="radio" name="newrate" value="No" /> No', 
 
     buttons: Ext.MessageBox.OKCANCEL, 
 
     fn: function(btn) { 
 
      if(btn == 'ok') { 
 
var buttons = document.getElementsByName("newrate"); 
 
    for(var i = 0; i < buttons.length; i++) {   
 
     if(buttons[i].checked) { 
 
     alert(buttons[i].value); 
 
     break; 
 
     } 
 
    }      
 
       } 
 
     } 
 
    }); 
 
     } 
 
     });
<link rel="stylesheet" href="https://cdn.sencha.com/ext/gpl/4.1.1/resources/css/ext-all.css"> 
 
<script type="text/javascript" src="https://cdn.sencha.com/ext/gpl/4.1.1/ext-all-debug.js"></script>

+0

感谢Ankit的答案。还有一个问题,因为我看到这有一些浏览器的限制。它在Chrome上适用于我,但在IE8上遇到了问题。有没有其他方法可以在所有浏览器上运行? –

+0

哦..问题是IE 8不支持':checked' CSS选择器。所以我们需要循环单选按钮并找到选中的值。我已经更新了我的答案 –

+0

非常感谢。这解决了我的问题。 –