мой первый пост здесь. Я не новичок в JQuery, но сложная кодировка довольно сложная (естественно!). Я объясню свою проблему как можно яснее. Я использую elgg, поэтому некоторый код здесь будет специфичным для elgg. Это не проблема.Получить атрибуты дочерних элементов элементов в .each() внутри другого .each()
Я создаю страницу, которая позволяет моим пользователям добавлять вопросы к чему-то. Они могут добавлять вопросы, используя следующий метод:
echo "<div id='ques_holder'>";
echo "<table><tr><td style='width:380px;padding-right:10px;'>";
echo "<b>Question:</b> ";
echo elgg_view("input/text", array('internalname' => 'ques_','internalid' => 'ques_'));
echo "</td><td style='width:90px;'>";
echo "<b>Answer:</b> ";
echo elgg_view("input/pulldown", array('internalname' => 'ans_','internalid' => 'ans_', 'options_values' => array('true' => 'True', 'false' => 'False')));
echo "</td></tr></table>";
echo "</div>";
Теперь я хочу, чтобы сделать возможным, чтобы добавить больше чем один вопрос в то время, так что я использую следующий код для клонирования для достижения этой цели:
var quescount = 0;
function add_question() {
quescount++;
var clone = $("#ques_holder").clone(false);
$("*", clone).add(clone).each(function() {
if (this.id) {
this.id = this.id + quescount;
}
if (this.name) {
this.name = this.name + quescount;
}
});
$("#interact_input_questions_adder").append(clone);
}
Все это прекрасно работает. Добавляются новые вопросы, а их идентификаторы и имена обновляются с числом (quescount), а также с их дочерними элементами. Проблема связана со следующей частью. Я пытаюсь объединить все имена и значения ввода для отправки через ajax в php-файл. Здесь мой код разбивается. Я пытался выполнить двойной вызов .each() (один внутри другого), но что-то в моей кодировке не работает. Код ниже:
function save_questions(){
var qrange = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
var activity = "<?php echo $activity;?>";
datastr = "&activity=" + activity;
jQuery.each(qrange , function(index,value){
$("#ques_holder"+value).find('input').each(function(){
datastr += $(this).attr('name');
});
});
alert(datastr);
}
вещей, чтобы рассмотреть
Типов входов поступающих может меняться каждый раз (один я дал только один пример)
кодирования Elgg не ломать вещи
qrange массив просто ограничить количество вопросов (которые я не положил в add_question() функции только пока)
Я предполагаю, что мне интересно, это ... вы можете сделать .each() внутри jQue ry.each(), и согласно моему кодированию, как я могу получить имена всех этих входов, найденных внутри этих вызовов?
Любая помощь очень ценится. Не стесняйтесь высмеивать меня за мое уродливое кодирование, я научил себя пробным ошибкам и ошибкам с таких сайтов, как stackoverflow. ;)
EDIT: после серьезного поцелуя лица я понял, что ошибка заключалась в том, чтобы не использовать «onclick», когда я должен быть. Окончательный материал выглядит следующим образом и фактически был предоставлен RightSaidFred, который почему-то удалил свой ответ.
function save_questions(){
var qrange = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20];
var activity = "<?php echo $vars['activity'];?>";
datastr = "&activity=" + activity;
jQuery.each(qrange , function(index,value){
$("#ques_holder"+value).find('input').each(function(input_idx, input){
datastr += "&" + $(input).attr('name') + "=" + $(input).attr('value');
});
});
alert(datastr);
}
И как ваш код нарушается? Каково содержание 'datastr'? Это важная деталь :). '.each()' inside '$ .each()' работает - см. [эта скрипка] (http://jsbin.com/osojil/edit#javascript.live). – kubetz
Что означает «что-то в моей кодировке не работает»? Что вы хотите совершить и что на самом деле происходит? – gilly3
** лицо ладонь ** - ужасная ошибка новобранец использования старого кода. Раньше у меня была кнопка «сохранить вопросы», заданные с идентификатором, но затем изменила jQuery на функцию, поэтому для нее был необходим onclick.Оповещения теперь появляются, как следует, с правильными данными. Следующий метод от ** maxijb ** также решает проблему, поэтому я буду отмечать ее как правильную и добавить свой окончательный код к вопросу. Извините за тупость, здесь слишком рано утром! – Allerion