javascript - JQuery 不适用于大小为 1 的数组

标签 javascript jquery

我有一个输入类型复选框,如下所示:

<tr class=odd>
<td align="center"> <input type="checkbox" id="psn" name="psn" value='20500561'  /> </td>                                           
<td width="75"> 20500561&nbsp; </td>
<td> ABCDEFG CO <span style="color:maroon;font-size:8pt;"></span> </td>
<td> 715 LOCAL STREET </td>
<td> ST.LOUIS </td>
<td> MO </td>
</tr>
<tr class=even >                       
<td align="center"> <input type="checkbox" id="psn" name="psn" value='26736' /> </td> 
<td width="75"> 26736&nbsp; </td>
<td> ABC <span style="color:maroon;font-size:8pt;"></span> </td>
<td> 1716 LOCUST ST </td>
<td> DES MOINES </td>
<td> IA </td>
</tr>   .....

我有一个提交按钮,点击它会调用这个 JQuery,

$('#submitButton').click(function () {

    var mySelect = checkSelected();

    if (mySelect == undefined) {
        alert("You must select an item to continue.");
        return false;
    }


    var commaSepVals = '';  
    for(var index=0;index < document.searchCridResults.psn.length; index++ ){
        if(document.searchCridResults.psn[index].checked){
            alert("checked crid");
            commaSepVals += document.searchCridResults.psn[index].value+',';
            alert("commaSepVals ))) "+commaSepVals);
        }
    }
    commaSepVals = commaSepVals.substr(0,commaSepVals.length -1);   
    var returnValsFromQ = '<c:out value="${sessionScope.returnVals}" />';   
    var returnArray = returnValsFromQ .split(',');

///////////////
}

function checkSelected() {  
 var selected = $('input[name=psn]:checked').val();     
 return selected;
}

以上代码对大于 1 的行有效,但当行 = 1 时失败。 当只有一行时,document.searchCridResults.psn.length 未定义。所以我无法获得选中项的值。

最佳答案

这是其中一种有趣的情况,答案是:使用更多 jQuery。 :-)

如果你想始终如一地得到一个类似数组的东西(特别是:一个 jQuery 实例),而不是

document.searchCridResults.psn

使用

$(document.searchCridResults).find("[name=psn]")

问题是当只有一个时,document.searchCridResults.psn 是对该一个 元素的引用。当有多个节点时,DOM 会创建一个类似数组的东西(NodeList)。另一方面,jQuery 始终是基于集合的(这是它强大功能的重要组成部分)。

例如,创建 commaSepVals 字符串的循环可以转换为:

commaSepVals = $(document.searchCridResults).find("[name=psn]").filter(function() {
    return this.checked;
}).map(function() {
    return this.value;
}).get().join(",");

实例:

$("[name=psn]").on("click", function() {
  var commaSepVals = $("#searchCridResults").find("[name=psn]").filter(function() {
    return this.checked;
  }).map(function() {
    return this.value;
  }).get().join(",");
  $("<p>Selected: " + commaSepVals + "</p>").appendTo(document.body);
});
<p>Click checkboxes below</p>
<table id="searchCridResults">
  <tbody>
    <tr>
      <td>
        <label>
          <input type="checkbox" name="psn" value='first' />first</label>
      </td>
      <td>
        <label>
          <input type="checkbox" name="psn" value='second' />second</label>
      </td>
      <td>
        <label>
          <input type="checkbox" name="psn" value='third' />third</label>
      </td>
      <td>
        <label>
          <input type="checkbox" name="psn" value='fourth' />fourth</label>
      </td>
    </tr>
  </tbody>
</table>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>


旁注:在多个元素上使用相同的 id 值是无效的。相同的 name 可以,但不能使用相同的 id

关于javascript - JQuery 不适用于大小为 1 的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29923661/

相关文章:

jquery - 背景图像循环 - 具有平滑淡入淡出或过渡的 z 索引

javascript - jQuery UI datepicker 日期范围问题

javascript - 如何使用外部js文件访问表单?如何从客户端隐藏js的敏感内容?

javascript - 从具有重复值的数组创建对象

javascript - 链+过滤器+值返回值不就是一个函数吗?

javascript - 没有 CSS 的 SVG 按钮无法正常工作

jquery - 带有自定义角的html按钮

javascript - Three.js computeCentroids 是做什么的?

jquery - raphaeljs 饼图动态值数组变化

jquery - Rails 应用程序中的 Bootstrap Carousel,显示所有图像但没有缩略图。在 Carousel 中显示来自数据库的图像