Автоматически получать значения всех элементов внутри div с помощью jQuery
У меня есть основной div, и внутри него много вводимого текста и радио-кнопки.
Как это:
<div id="mainDiv">
<input type="text" name="text-1" /> <br/>
<input type="radio" name="radio-1" />Yes
<input type="radio" name="radio-1" />No <br/>
<input type="text" name="text-2" /> <br/>
<input type="text" name="text-3" /> <br/>
</div>
<img src="img/img.gif" onclick="getAllValues();" />
Я хочу определить функцию getAllValues()
в jQuery, чтобы получить все значения в mainDiv
и сохранить их в строку.
Это возможно?
Ответы
Ответ 1
Для этого вы можете выбрать все поля формы и использовать map()
для создания массива из их значений, которые можно получить в зависимости от их type
. Попробуй это:
function getAllValues() {
var inputValues = $('#mainDiv :input').map(function() {
var type = $(this).prop("type");
// checked radios/checkboxes
if ((type == "checkbox" || type == "radio") && this.checked) {
return $(this).val();
}
// all other fields, except buttons
else if (type != "button" && type != "submit") {
return $(this).val();
}
})
return inputValues.join(',');
}
Здесь можно объединить оператор if
, но я оставил их отдельно для ясности.
Ответ 2
Попробуйте что-то вроде этого:
function getAllValues() {
var allVal = '';
$("#mainDiv > input").each(function() {
allVal += '&' + $(this).attr('name') + '=' + $(this).val();
});
alert(allVal);
}
Ответ 3
Вот решение, которое строит вам строку JSON. Он получает значения текстовых полей, флажков и элементов выбора:
function buildRequestStringData(form) {
var select = form.find('select'),
input = form.find('input'),
requestString = '{';
for (var i = 0; i < select.length; i++) {
requestString += '"' + $(select[i]).attr('name') + '": "' +$(select[i]).val() + '",';
}
if (select.length > 0) {
requestString = requestString.substring(0, requestString.length - 1);
}
for (var i = 0; i < input.length; i++) {
if ($(input[i]).attr('type') !== 'checkbox') {
requestString += '"' + $(input[i]).attr('name') + '":"' + $(input[i]).val() + '",';
} else {
if ($(input[i]).attr('checked')) {
requestString += '"' + $(input[i]).attr('name') +'":"' + $(input[i]).val() +'",';
}
}
}
if (input.length > 0) {
requestString = requestString.substring(0, requestString.length - 1);
}
requestString += '}';
return requestString;
}
Вы можете вызвать функцию следующим образом:
buildRequestStringData($('#mainDiv'))
И результат http://jsfiddle.net/p7hbT/