-1

My problem is simple, but I can not fix it, basically need to capture the values of a field "select multiple". Code is the gist.

Gist Code

<script type="text/javascrit">
function newsletter_send( name, email, category register ) {
    jQuery.ajax({
        type: "POST",
        url: alm_localize.ajaxurl,
        data: {
            action      : "newsletter_register", /// function for register data in DB.
            user_name   : name,
            user_email  : email,
            user_category   : category, // Here you can find the values of the select
            user_register   : register
        },
        success: function(data, textStatus, XMLHttpRequest) {
            if( email !== "" && name !== "" && register !== "" ) {
                $( "#newsletter_form" ).find("#feedback").html("<span class='success'Seu email foi registrado com sucesso!</span>");
            }
            $( "#newsletter_form" ).find( ".form_loading" ).removeClass( "show" );
        //  _newsletter_reset(); // reset values form
        },
        error: function(MLHttpRequest, textStatus, errorThrown) {
            $( "#newsletter_form" ).find("#contactResponse").html("<span class='error'>Algo deu errado, tente novamente mais tarde.</span>");
            $( "#newsletter_form" ).find( ".form_loading" ).removeClass( "show" );
        }
    });
}
</script>

<!--  THIS HTML -->

<select id="user_category" name="user_category[]" class="user_category" multiple="">
    <option selected="selected">Selecione uma categoria</option>
    <option value="4">Notícias</option>
    <option value="6">Santa Catarina</option>
    <option value="5">Saúde</option>
    <option value="1">Sem categoria</option>
</select>

<?php

// yeah, i use wordpress :p

/*
 * Function for register data in mysql
 */

function newsletter_register() {

    $user_email = $_POST["user_email"];
    $user_name  = $_POST["user_name"];
    $user_category  = implode(',', $_POST["user_category"]);
    $user_register  = $_POST["user_register"];

    global $wpdb;

    if(
        isset( $user_name )
        || isset( $user_email )
        || isset( $user_category )
    ) {
        $wpdb->insert( $wpdb->prefix . "newsletter", array(
            "user_name" => $user_name,
            "user_email"    => $user_email,
            "user_category" => $user_category,
            "user_register" => $user_register
        ));
    }
}

add_action( "wp_ajax_nopriv_newsletter_register", "newsletter_register" );
add_action( "wp_ajax_newsletter_register", "newsletter_register" );
?>

excuses for simplicity.

0

1 Answer 1

0

$('select').val() will return an array when the select is multiple .

From val() API Docs:

In the case of select elements, it returns null when no option is selected and an array containing the value of each selected option when there is at least one and it is possible to select more because the multiple attribute is present.

Example:

$(function() {
  $('textarea').val(JSON.stringify($('select').val()));
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<select multiple>
  <option value="1" selected>Item 1</option>
  <option value="2">Item 2</option>
  <option value="3" selected>Item 3</option>
  <option value="4">Item 4</option>
  <option value="5">Item 5</option>
  <option value="6" selected>Item 6</option>
</select>
<br>
<br>
<textarea></textarea>

Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.