2016-10-28 3 views
1

У меня есть следующий HTMLПолучение значение выбора элемента с помощью JQuery

<div class="question-set"> 
     <div class="row question"> 
     <div class="col-md-2"> 
      <select class="form-control" name="type[]"> 
      <option value="Teacher feedback">Teacher feedback</option> 
      <option value="Genral Question">Genral Question</option> 
      <option value="Informative Question">Informative Question</option> 
      </select> 
     </div> 
     <div class="col-md-8"> 
      <input type="text" class="form-control" name="questions[]" placeholder="Enter the question here" /> 
     </div> 
     </div> 
     <div class="row question"> 
     <div class="col-md-2"> 
      <select class="form-control" name="type[]"> 
      <option value="Teacher feedback">Teacher feedback</option> 
      <option value="Genral Question">Genral Question</option> 
      <option value="Informative Question">Informative Question</option> 
      </select> 
     </div> 
     <div class="col-md-8"> 
      <input type="text" class="form-control" name="questions[]" placeholder="Enter the question here" /> 
     </div> 
     </div> 
    </div> 

Короче есть выберите тег с именем типа [] и имена текстовых поля ввода вопросов []. Мне нужно передать значения на php-страницу как вызов ajax для вставки в базу данных. У меня есть следующий код AJAX ..

$.ajax({ 
      method: "POST", 
      url: "feedback_create_form_process.php", 
      data: {"questions": $("input[name='questions[]']").val(), "type": $("select option:selected").val()}, 
      success: function(data){ 
      alert(data); 
      } 
     }); 

Вот мой PHP код

<?php 
    include 'con.php'; 
    if (isset($_POST) && sizeof($_POST)) { 
    $question = $_POST['questions']; 
    $type = $_POST['type']; 

    echo count($question); 
    foreach($question as $key => $n) { 
     $result = $con->query("insert into form question(null, ".$question[$key].", ".$n.")"); 
    } 
    } 
?> 

Количество возвращается в 1. Он посылает только на первый вопрос, а не массив. Я хочу значения в массиве, поэтому я могу сделать вставку в цикле.

ответ

2

Как Документально в JQuery .val()

Description: Get the current value of the first element in the set of matched elements.

Вы можете использовать

var values = $("input[name='questions[]']").map(function(){return $(this).val();}).get(); 

или

var values = []; 
$("input[name='questions[]']").each(function() { 
    values.push($(this).val()); 
}); 
+0

Я делаю то же самое для выбранного элемента? –

+0

Да, с любым селектором jquery (y) –

+0

@CastorCGodinho проверить это http://stackoverflow.com/a/19372680/1475257 –

0

Вы можете использовать map() функции JQuery, чтобы вернуть значения, массив, например:

var questions = $("input[name='questions[]']").map(function() {return $(this).val()}).get(); 
var types = $("select[name='type[]']").map(function() {return $(this).val()}).get(); 

$.ajax({ 
    method: "POST", 
    url: "feedback_create_form_process.php", 
    data: {"questions": questions, "type": types}, 
    success: function(data){ 
     alert(data); 
    } 
}); 

EDIT: Понимание аналогичного решения было предоставлено ABDU_GO. Я считаю, что мой скрипт будет более читабельным, но если вы обнаружите, что это ваше решение, я бы предложил принять его ответ.

+0

Функция карты jquery работает как шарм, но когда я передаю его с массивом данных JSON, вызов AJAX не работает. –

+0

Какие ошибки, если они есть, вы получаете в консоли? – Santi

+0

Использование getPreventDefault() устарело. Использовать defaultPrevented вместо.feedback_create_form.php TypeError: 'stepUp' вызывает объект, который не реализует интерфейс HTMLInputElement. r.param/е() jquery.min.js: 4 XB() jquery.min.js: 4 XB() jquery.min.js: 4 XB() jquery.min.js : 4 XB() jquery.min.js: 4 r.param() jquery.min.js: 4 .ajax() jquery.min.js: 4 feedback_create_form.php: 28 r.event.dispatch() jquery.min.js: 3 r.event.add/q.handle() –

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