2016-12-06 220 views
1

我正在写一个JS代码,它读取特定的复选框,检查它们是否被选中,如果是,则将它们的值附加到字符串中。这是我的代码:javascript concat()方法随机添加换行符

var checkboxArr = document.querySelectorAll('#div_name input[type="checkbox"]'); 
    var str=""; 
    for(var i =0; i< checkboxArr.length;i++){ 
     var cb = checkboxArr[i]; 
     if(cb.checked){ 
      var newVal=cb.value; 
      str=str.concat(newVal); 
      str=str.concat(","); 
     } 
    } 
    alert(str); 

,我得到的是字符串:

value1 
,value2 
,value3 

如何在这些新行字符串中来吗?

此外,这些换行符的出现是随机的 - 有时会出现,有时我会得到所需的字符串。

我也尝试将concat()调用合并为1语句,并且我也使用了+=运算符,但没有运气。

任何指导是认真的赞赏。谢谢

+0

你能粘贴HTML? – 31piy

+1

检查浏览器中的页面源代码(通常在良好的浏览器中使用Ctrl + U) - 查看“value =”任何“'为复选框......是最后一个新行的'''还有,我怀疑这些值实际上不是那么短,而且你只是误​​解了警报(同样,你在示例输出中没有'',你肯定会得到你的代码) - 使用console.log而不是alert,看看是否同样神秘的新行出现在控制台 –

回答

2

这就是你需要的。用JS右:d

var checkboxArr = document.querySelectorAll('#div_name input[type="checkbox"]'); 
var str = []; 

checkboxArr.forEach(function(cb) { 
    if (cb.checked) str.push(cb.value); 
});  

alert(str.join(', ')); 

,如果你仍然有相同的结果,检查你的代码html。好像你已经断行的复选框,你的价值

+1

'过滤器'和'地图'会更好..;) – TryingToImprove

+0

也许,但'forEach'总是更容易为noobies – ixpl0

+0

'concat - 是数组方法,而不是字符串方法'那么他的代码根本无法工作** - 根据你的逻辑,[String#concat](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/concat)不存在,但它的工作原理,并为您的问题添加一个换行符 –

1

检查实施与ES6之后,不知道为什么你越来越new line

var btn = document.getElementById('btn'); 
 

 
btn.onclick = function(){ 
 
var checkboxArr = document.querySelectorAll('#div_name input[type="checkbox"]:checked'); 
 
    var res = Array.from(checkboxArr).map(cb => cb.value.trim()).join(',') 
 
    console.log(res) 
 
}
<div id="div_name"> 
 
    <input type="checkbox" value="cb_1" />  
 
    <input type="checkbox" value="cb_2" />  
 
    <input type="checkbox" value="cb_3" />  
 
    <input type="checkbox" value="cb_4" />  
 
    <input type="checkbox" value="cb_5" />  
 
</div> 
 
<button id="btn">Check</button>