JQuery不适用于大小为1

时间:2015-04-28 15:32:27

标签: 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的行但在row = 1时失败。 当只有一行时,document.searchCridResults.psn.length未定义。所以我无法获得已检查项目的值。

1 个答案:

答案 0 :(得分:4)

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

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

- (NSUInteger)supportedInterfaceOrientations {
    return UIInterfaceOrientationMaskPortrait;
    // This used to be:
    //return UIInterfaceOrientationPortrait;
}

使用

document.searchCridResults.psn

问题在于,当只有一个时,document.searchCridResults.psn是对该一个元素的引用。当有多个时,DOM会创建一个类似于数组的东西($(document.searchCridResults).find("[name=psn]") )。另一方面,jQuery 总是基于集合(这是它的强大功能)。

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

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不一样。