0

我有这种结构JSP

<c:forEach var="test" value="${test}">
<table>
    <tr>
        <td><textarea class="no-resize" id="comments"></textarea></td>
        <td><select class="select"> ... </select> </td>
        <td><textarea class="no-resize" id="reason"></textarea></td>
        <td><textarea class="no-resize" id="description"></textarea></td>
    </tr>
</table>
</c:forEach>

和一个保存按钮:

<button class="btn " type="submit" form="controller" name="save" value="save" id="save" onclick="return onSave()">Save</button>

每行基本上都是空的,我想要做的是,当点击保存按钮时,仅在以下情况下提交:

  1. 更改的行必须填写所有字段
  2. 否则所有字段将保持为空

如果可能的话,使用 jQuery。

到目前为止我尝试的是:

         var isFilled = true;
         $(".no-resize[id='comments']").each(function(){
             $(this).change(function(){
                if(!$(this).val() == ''){
                    setTextBox(false);
                }else{
                    setTextBox(true);
                }
             });
         });
         function setTextBox(isEmpty)
         {
             isFilled = isEmpty;
         }

         function onSave()
         {
             return isFilled; 
         }; 

上面的代码检查 是否textareaid comments更改,如果它为空,它将设置为isFilledfalse因此提交将失败。我所做的代码的问题是当我用它更改两个textareaid of comments它只会检查最后一个更改textarea

知道如何解决这个问题吗?

4

1 回答 1

1

尝试

//this is a flag which will be set to false if an invalid row is found
var valid = true;
//iterate through each row of the table, it is because we need to validate the textarea's in each row
$('tr').each(function(){
    //all textarea's in the row
    var els =  $(this).find('textarea');

    //we uses filter to find the textarea's where the length of the textarea is 0
    var len = els.filter(function(){
        return $.trim($(this).value()).length == 0;
    });
    //if the textarea's length is neither 0 or not equals to the total length then it is not valie
    if(len > 0 && len != els.length){
        valid = false;
        return false;
    }
});

if(!valid){
    //there are incomplete records
}
于 2013-09-29T12:39:26.160 回答