2017-09-25 92 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

非常感謝。這解決了我的問題。 –