【问题标题】:How to get the value of a selected radio button when the id for them is dynamically generated?当动态生成它们的 id 时,如何获取选定单选按钮的值?
【发布时间】:2017-06-20 08:31:27
【问题描述】:

我的 Html 如下所示:

<div id="associatedAPListTable" style="float:left"><Associated (Destination)>
    <table border="0" cellspacing="0" cellpadding="0" class="listContainer" align="center" >
        <thead>
            <tr>
            <th class="tableheader" align="left" width="170">MAC address</th>
            <th class="tableheader" align="left" width="170">LradName</th>

            </tr>
        </thead>
        <tbody id="associated_tablebody">
        </tbody>
    </table>
    </div>

我的 javascript 如下所示:

function getAssociatedList(){
var associatedAPListArray=[];
var xhrArgs = {
    url:"abc/sample/resource",
    preventCache: true,
    contentType: "application/json"
};
var deferred = dojo.xhrGet(xhrArgs);
deferred.addCallback(function(response){
    var associatedApListObj = dojo.fromJson(response);
    var firstJsonObject;
    var row = '';
    for (i=0; i <= dojo.fromJson(associatedApListObj.items).length-1; i++){
        firstJsonObject = dojo.fromJson(associatedApListObj.items)[i];
        var MacAddress = firstJsonObject.MacAddress;
        var LradName=firstJsonObject.LradName;
        var style_td='<td align="left" width="170">';
        row+='<tr>'+style_td+'<input type="radio"'+'id="associated_'+i+'" name="associatedAp"/ >'+MacAddress+'</td>'+style_td+LradName+'</td></tr>';
    }
    document.getElementById('associated_tablebody').innerHTML = row;
    });
}

所以,既然我已经创建并显示了这些单选按钮, 我需要获取选中的单选按钮的值。有人可以告诉我如何做到这一点是 Javascript 而不是 jQuery?

【问题讨论】:

    标签: javascript html arrays dynamic radio-button


    【解决方案1】:

    这将为您提供选中单选按钮的id

    document.querySelector('input[type=radio]:checked').getAttribute('id');
    

    【讨论】:

    • 这是获取 parent 的 id 。也就是我有一个父输入单选按钮,点击它,就调用了上面的方法。
    【解决方案2】:

    首先,我猜你想要所选单选按钮的 Mac 地址?

    根据你的代码不清楚,因为你说

    我需要获取选中的单选按钮的值

    然而,你正在生成的这个输入标签

    &lt;input type="radio"'+'id="associated_'+i+'" name="associatedAp"/ &gt;

    没有设置值,否则它可能看起来像这样:

    &lt;input type="radio"'+'id="associated_'+i+'" name="associatedAp" value="'+MacAddress+'"/ &gt;

    为了清楚起见,整行代码如下所示:

    row+='&lt;tr&gt;'+style_td+'&lt;input type="radio"'+'id="associated_'+i+'" name="associatedAp" value="'+MacAddress+'" /&gt;'+MacAddress+'&lt;/td&gt;'+style_td+LradName+'&lt;/td&gt;&lt;/tr&gt;';

    现在您需要能够选择它并获取值:

    var selection = document.querySelector('input:checked').value;

    【讨论】:

    • 谢谢@Levi。但这会返回“on”,而不是所选收音机的值。
    • "on" 默认返回,因为它已被选中,但没有设置任何值,因此从您的代码 var selection = document.querySelector('input:checked').value; 可以正常工作的意义上说,这很好。然而,你需要在你的单选输入标签中设置一个“值”属性,一旦你这样做了,你就会得到你真正想要的值。
    【解决方案3】:

    如果您希望监听用户事件,则需要在创建元素后为其添加事件监听器。

    function handleChange(e) {
      // is it checked?
      console.log(this.checked)
      // what's the value?
      console.log(this.value)
    }
    
    var inputs = document.getElementById('associated_tablebody').querySelectorAll('input')
    
    inputs.forEach(function(el) {
      el.addEventListener('change', handleChange)
    })
    

    更新

    我以为你想监听每个输入的事件。我的错。

    如果您只是想在将 html 添加到页面后找到选中的单个单选按钮,只需将结果过滤到所选元素并存储(或记录)它的值:

    var inputs = document.getElementById('associated_tablebody').querySelectorAll('input')
    
    var selected = [].slice.call(inputs).filter(function(el) {
      return el.checked
    }).pop()
    
    console.log(selected.value)
    

    小提琴:https://jsfiddle.net/jw7e0aL4/8/

    【讨论】:

    • 这很好用。但问题是,单击一个收音机,控制台显示一次。 Onclick 另一个收音机,控制台显示两次。因此,计数会根据我点击的次数不断增加。
    • 有没有办法在单击一个单选按钮时只打印一次控制台?它看起来像是在循环
    猜你喜欢
    • 2016-09-01
    • 2015-04-19
    • 2013-05-25
    • 2018-09-05
    • 1970-01-01
    • 2018-06-03
    • 2011-10-10
    • 2013-03-28
    • 1970-01-01
    相关资源
    最近更新 更多