2013-04-12 3 views
2

У меня есть массив флажков, как ниже,Pass Массив HTML элемент (ы) в JavaScript

<input type="checkbox" value="1" id="a_r_id[1]" name="a_r_id[1]"> 
<input type="checkbox" value="1" id="a_r_id[2]" name="a_r_id[2]"> 
<input type="checkbox" value="1" id="a_r_id[3]" name="a_r_id[3]"> 
<input type="checkbox" value="1" id="a_r_id[4]" name="a_r_id[4]"> 

на моей странице ... и я хочу подать только проверенную один с помощью JavaScript (JQuery AJAX) .. . Как мне это сделать ?

Редакция:

На самом деле, я хочу, чтобы получить все ключи массива на проверенном флажке, так что я могу отправить его с помощью AJAX. Что-то вроде «1,4» как строка.

+0

Только отмеченная коробка отмечена буголетом. Вы уверены, что правильно сформулировали свой вопрос? – Ejaz

+0

Извините, если мой вопрос неоднозначен. Я отредактировал свой вопрос –

ответ

1
var keys = [], 
    keystring; 
$('input[name^="a_r_id"]:checked').each(function() { 
    keys.push($(this).attr('name').replace(/a_r_id\[(\d+)\]/, '$1')); 
}); 
keystring = keys.join(); 

Конечно, есть лучшие способы сделать это, но это отвечает на ваш вопрос, как вы обрамление его.

+1

Пожалуйста, добавьте объяснение, как это можно применить для ответа на вопрос. –

+2

Извинения, если не ясно. Очевидно, что только те, которые были проверены, будут отправляться при отправке формы, поэтому я решил задать вопрос о том, как идентифицировать проверенные входы, чтобы что-то с ними делать (например, вызов AJAX). В моем ответе будут указаны все входы, начинающиеся с имени «a_r_id», которые проверяются, а затем разработчик может что-то сделать с возвращенным объектом. –

+0

@DerekHenderson, не могли бы вы объяснить, как я могу получить ключи массива из возвращаемого объекта? Я новичок в javascript. Благодарю. –

-1

Я думаю, что вы хотите сделать что-то вроде этого

<input type="checkbox" value="1" id="a_r_id_1" name="a_r_id[]"> 
<input type="checkbox" value="2" id="a_r_id_2" name="a_r_id[]"> 
<input type="checkbox" value="3" id="a_r_id_3" name="a_r_id[]"> 
<input type="checkbox" value="4" id="a_r_id_4" name="a_r_id[]"> 
+1

, это не имеет значения. – Ejaz

-1

Радио Кнопка кажется более применимо здесь, а не флажки попробовать это:

<input type="radio" name="radiogroup" value="1" id="a_r_id[1]" name="a_r_id[1]"> 
<input type="radio" name="radiogroup" value="2" id="a_r_id[2]" name="a_r_id[2]"> 
<input type="radio" name="radiogroup" value="3" id="a_r_id[3]" name="a_r_id[3]"> 

Вы можете получить выбранное значение с помощью

$("input:radio[name=radiogroup]").click(function() { 
var value = $(this).val(); 
// 
do something with var 
// 
}); 
+0

Я должен использовать флажок, потому что у меня есть кнопка, чтобы проверить их все. В конце концов, флажок генерируется динамически, используя идентификатор данных строки как ключи для массива. В моем вопросе выше я использую 1,2, .., 4 в качестве примера. –

0

Наконец, я нашел ответ на мой вопрос выше. Я напишу это прямо здесь.

Проблема: Как я могу получить «ключ» из элементов HTML массива? (В моем случае, проверяется только флажок я хочу получить)

мой ответ код что-то вроде этого:

//first, i get every checked checkbox using jQuery selector, 
//as mentioned by DerekHenderson. 
var list_agent = $('input[name^="a_r_id"]:checked'); 
var l_c_agent = new Array(); 
//then, i create a loop to loop each object returned. 
for(var i=0;i<list_agent.length;i++){ 
    //after that, i'm using Regular Expression (match()) on every returned object id and throw it into some array. 
    l_c_agent[i] = list_agent[i].id.match(/[0-9]+/); 
} 
//finally, i join the array using javascript join() method so that i can pass it using jQuery AJAX as a string to my controller and process it. 
var clean_agent_list = l_c_agent.join(); 
var add_url = 'test.php'; 
$.ajax({ 
    url: add_url, 
    type: "GET", 
    data : { 'list_agent' : clean_agent_list }, 
    success: function(data_return) { 
     //alert(data_return); 
    } 
}); 

выход будет что-то вроде этого (если, используя мой пример выше вопрос, и мы проверить элемент с идентификатором 1,3 и 4 только)

1,3,4 

если кто-нибудь есть лучший код, пожалуйста, напишите его здесь, так что мы можем обсуждать, что лучше решить мою проблему.

+0

Я рад, что вы смогли найти решение. Возможно, поскольку вы нашли хотя бы часть моего ответа полезной, вы можете захотеть отдать ее вверх или даже выбрать ее в качестве принятого ответа. ;) (BTW, вам следует избегать использования 'new Array()', вместо этого используйте '[]'.) –

+0

@DerekHenderson, как я могу использовать [] в JavaScript? могу я просто объявить его как var l_c_agent []? и почему вы предположили, что вместо нового массива()? Благодарю. –

+0

'var l_c_agent = [];' лучше и эффективнее, чем 'var l_c_agent = new Array();', вот и все. –

0

Метод, который вы хотите, выглядит немного назад; браузер будет подать уже только проверенные флажков, но здесь идет:

var re = /\[(\d+)\]$/, 
    numbers = []; 

$('input[name^="a_r_id\\["]:checked').each(function() { 
    numbers.push(+this.name.match(re)[1]); 
}); 

console.log(numbers.join(',')); 

Он выбирает все установленные флажки, чье имя начинается с «a_r_id [». Затем регулярное выражение используется для извлечения числовой части между квадратными скобками и добавления в список значений.

+0

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

+0

@Moch все в порядке, мой ответ работает кстати? –

+0

ваш ответ тоже работал ... у вас слишком много}); btw ... :) –

Смежные вопросы