2010-01-21 4 views
1

У меня в моем документе 2 checkbox массивы. Один - engines[], а один - searchId[].jquery get array checkbox

$("input:checkbox[@name='searchId[]']:checked").each(function() i use this to capture all the values from the searchId[] checkboxes (only if checked). 
$("input:checkbox[@name='engines[]']:checked").each(function() same thing for engines 

проблема заключается в том, что селектор получает все отмеченные флажки в документе независимо от их имени. Как я могу заставить его получить только массив, который я хочу получить?

некоторый код для лучшего понимания:

$("#startSearch").live("click", function(event){ 
        //event.preventDefault(); 
        $("input:checkbox[@name='searchId']:checked").each(function(){ 

         $.getJSON("startsearch.php",{searchId: $(this).val()},function(data){ 
          alert($(this).val()); 
          $('#status_' + $(this).val()).text(data.status); 
          $('#results_' + $(this).val()).text(data.results); 
          $('#date_' + $(this).val()).text(data.date); 
          $('#totalResults_' + $(this).val()).text(data.totalResults); 
         }); 
        }); 
       }); 

$("#submit").click(function(event){ 
        event.preventDefault(); 

        $("input[@name='engines[]']:checked").each(function(){ 

         $.getJSON("addsearch.php", { inputString: $('#inputString').val(),searchString: $('#searchString').val(), engine: $(this).val() }, function(data){ 
          //$('#searchTable tbody tr:first').empty(); 
          var row = '<tr><td><span id ="status_'+data.id+'">'+data.status+'</span></td>'+ 
           '<td>'+data.search+'</td>'+ 
           '<td>'+data.category+'</td>'+ 
           '<td>'+data.engine+'</td>'+ 
           '<td><span id = "results_"'+data.id+'">0</span></td>'+ 
           '<td><span id ="date_'+data.id+'">'+data.date+'</span></td>'+ 
           '<td><span id ="totalResults_'+data.id+'">0</span></td>'+ 
           '<td style="width: 96px;"><div class="actions"><ul>'+ 
           '<li><input class="radio" name="searchId[]" type="checkbox" value="'+data.id+'" /></li>'+ 
           '<li><a class="action1" href="#">1</a></li>'+ 
           '<li><a class="action4" href="#">4</a></li>'+ 
           '</ul></div></td>'; 
          $('#searchTable tbody').after(row); 
         }); 
        }); 

       }); 
      }); 

ответ

5
  1. В @attr селекторы были полностью удалены на JQuery 1.3, если вы используете версию JQuery> 1.2, просто удалите @ знак из селектора.
  2. Знаки [ и ] должны быть удвоены.

    $("input:checkbox[name='searchId\\[\\]']:checked").each(function() { 
        //.. 
    }); 
    

Из docs:

В JQuery 1.3 [@attr] Селекторы стиля были удалены (они ранее были устаревшими в JQuery 1.2). Просто удалите символ «@» из ваших селекторов, чтобы они снова работали.

Полный список символов, которые need to be escaped: #;&,.+*~':"!^$[]()=>|/