jquery根据选中的复选框提取文本区域值


jquery pull textarea values based on which checkboxes were checked

我正在进行一个项目,该项目涉及返回所选复选框的id以及所选复选盒的相应文本区域字段中的文本。数据是动态显示的,到目前为止,我对复选框和文本区域的jquery pull都起作用:

    var noteList = $("textarea[name='revokeNotes']").map(function(){
            return this.value;
    }).get().join();
    var revokeList = $("input[name='revoke']:checked").map(function(){
            return this.id;
    }).get().join();

但我正在返回所有的notes字段,我不确定如何最好地迭代它们以找到正确的notes,因为它们的id不是顺序的,而是基于它们在表中的id。显示代码的最后一个版本如下:

<td><textarea name='"revokeNotes'" id='"".$v["id"]."'" cols='"30'"rows='"3'">".$v["notes"]."</textarea></td>
<td><input type='"checkbox'" id='"".$v["id"]."'" name='"revoke'" value='"".$v["id"]."'" /></td>

有没有办法从这种状态达到我的目标,或者我应该使用另一个jquery函数,类似于.map()?我曾想过使用复选框中的id字段来迭代所选的注释,并将它们推送到一个数组中,但我不确定1)这是否可行,2)如何做到这一点。

当我在ajax中传递一个值时,我需要以某种形式返回数据——数组或我可以在php中分解的东西来创建数组,因为没有设置每个用户将显示的最大或最小行数。地图一直在工作,直到我在上面加了一些逗号。

var noteList = $.map(
                 $("textarea[name='revokeNotes']").filter(function() {
                      return $(this).closest('td')
                                    .next('td')
                                    .find('input[type="checkbox"]')
                                    .is(':checked');
                  }), function(el) {
                          return el.value; 
               }).join();

adeneo的答案很好,我只提出以下改进:

  • 如果可能的话,请使用类选择器(如".revoke notes area"),因为它们比DOM+属性选择器更快
  • 假设这是一个表,并且每行有一个文本区域复选框组合,则可以遍历树到最接近的<tr>,并根据复选框位于DOM中文本区域之后,将JS从中解耦。

    var filterMethod = function() {
      $(this).closest('tr').find('.revoke-checkbox').is(':checked');
    };
    var mapMethod = function(el) {
      return el.value;
    };
    var nodeList = $.map($('.revoke-notes-area').filter(filterMethod), mapMethod);
    

没有理由不能或不应该将filter和map方法内联,我只是将它们拆分为变量,这样在这里更容易阅读。

你可以在这里查看我的代码笔:http://codepen.io/aaron/pen/eIpby.