2014-12-02 153 views
0

我试图从一组未选中的html复选框中存储values。据我所知,JQuery没有:未经检查的选择器,所以我必须反转:检查选择器。我已经完成了这一步,并且获取未经检查的框的值以及其他一些值,如null0。我不知道这些来自哪里。使用JQuery获取div中未选中复选框的值

这里是我的HTML

<div id="tag_results"> 
     <ul> 
      <li> 
       <input type="checkbox" value="29" name="tag" checked=""></input> 
       Agriculture 
      </li> 
      <li> 
       <input type="checkbox" value="30" name="tag" checked=""></input> 
       Angling 
      </li> 
      <li> 
       <input type="checkbox" value="37" name="tag"></input> 
       Animals 
      </li> 
      <li> 
       <input type="checkbox" value="54" name="tag" checked=""></input> 
       Arts 
      </li> 
     </ul> 
    </div> 

这里是我的JQuery

$('#saveBtn').click(function(e){ 
       e.preventDefault(); 
       //Get hidden field values and store in an Array 

       $tagArray = []; 
       $removeTags = []; 

       //Get the Checked Tags and store in an Array(will be added) 
       $('#tag_results :checked').each(function(){ 
        $tagArray.push(this.value); 
       }); 

       //Get the Unchecked Tags and Store in an Array(will be removed) 
       $('#tag_results :not(:checked)').each(function(){ 
        $removeTags.push(this.value); 
       }); 

       console.log($removeTags); 

       //Make Ajax request to the add_tags script and pass Array as parameter. When response recieved show dialog. 
       //Pass the name, id and type of company with the array of tags to the save_tags.php script. 
       $('#active_tags').load('pages/ajax/save_tags.php', {'removeTags': JSON.stringify($removeTags),'tags': JSON.stringify($tagArray) ,'name': $('#comp_name').val(), 'id': $('#comp_id').val(), 'type': $('#type').val() }, function(response, status, xhr){ 
       }); 
    }); 

这是console.log结果:

Array [ undefined, 0, 0, 0, "37", 0, "54" ] 

这是我用它来生成代码复选框html

$output = "<ul>"; 
    if(mysql_num_rows($result) > 0){//If results returned (tags found matching letter) so construct list 
     while($row = mysql_fetch_array($result)){//while there are rows in the results array add a list item 
      if(in_array($row['name'], $applied_tags)){ 
       $output .= "<li>" .'<input checked type="checkbox" name="tag" value="'.$row['id'].'">' .$row['name'] .'</li>'.PHP_EOL; 
      }else{ 
       $output .= "<li>" .'<input type="checkbox" name="tag" value="'.$row['id'].'">' .$row['name'] .'</li>'.PHP_EOL; 
      } 
     } 
    }else{//Else there was no matching tags so display an error message to the user. 
     $output .= "<li>No Tags found beginning with the letter " . $letter . "</li>"; 
    } 
    $output .= "</ul>"; 

有没有人有任何线索可能导致这种情况?当然基于上述代码中的数组应该包含值37和54 ...

回答

2

尝试了这一点

$("input:checkbox:not(:checked)") 
+0

工作,谢谢。为什么我的原始代码不工作? – Javacadabra 2014-12-02 12:47:08

+1

它发生是因为没有提及元素的类型。 – 2014-12-02 12:49:47

+0

非常感谢你,会在3分钟内接受回答。 – Javacadabra 2014-12-02 12:51:47

1

在你的代码did not mention check box or name of checkbox,所以它瓦特ill selected all children of tag_results,并检查所有元素

$('#tag_results [type=checkbox]:not(:checked)').each(function() { 
    $removeTags.push(this.value); 
}); 

DEMO

注:$('#tag_results :not(:checked)')将选择所有儿童元素除外检查