Получение TextArea с помощью JQuery

Я представляю форму с помощью JQuery. Форма выглядит ниже

<form class="ask-more-form">
<div class="product_info_2">
<textarea name="product_question" class="textbox" placeholder="Ask You Question Here"></textarea>
</div>
<input type="hidden" name="product_id" value="1" id="product_id">
<a href="#" class="whiteButton submit" id="ask-more-submit-button">Ask Question</a>
</form>

И JQuery, чтобы поймать форму, выглядит следующим образом:

$('#ask-more').on('submit', '.ask-more-form', function() {
        var product_id = $(this).children('input[name=product_id]').val();
        var product_question = $(this).children('textarea[name="product_question"]').text();

alert(product_question);
//submitQuestion(product_id, product_question);

                });

Product_id всегда читается, но вопрос о продукте всегда равен нулю. Может ли кто-нибудь сказать мне, почему это происходит?

Ответ 1

.children только на один уровень вниз. Вместо этого используйте .find:

$('#ask-more').on('submit', '.ask-more-form', function () {
    var product_id = $(this).children('input[name=product_id]').val();
    var product_question = $(this).find('textarea[name="product_question"]').text();
    alert(product_question);
    //submitQuestion(product_id, product_question);
});

Ответ 2

Вы используете text() в <textarea>, когда вы должны использовать val()

var product_question = $(this).children('textarea[name="product_question"]').val();

Это справедливо для других типов входных элементов, таких как <select> и <input>

Ответ 3

Use .val() instead of .text(). Он выполнит трюк

Ответ 4

Вам не нужно использовать children или find. Поскольку у вас уже есть id формы, вы можете использовать ее для своей базы и просто использовать стандартный селектор jquery, например:

var product_question = $('textarea[name="product_question"]', this).val();

добавив аргумент seocnd, который вы указываете jquery, чтобы использовать только this в качестве дерева DOM.