2016-11-08 3 views
0

Редактировать: Спасибо за помощь всем, я изменил тему, так как я обнаружил, что проблема более специфична для PHP.Выбранная опция не попадает в переменную post

Я новичок в jQuery и Javascript, и я создаю страницу с функцией поиска, которая требует от пользователя ввода региона для получения информации, относящейся к региону. В форме, я включил выпадающее меню:

<select name="region" id="region"> 

    <option selected="selected" value="na">NA</option> 
    <option value="euw">EUW</option> 
    <option value="eune">EUNE</option> 
    <option value="tr">TR</option> 
    <option value="lan">LAN</option> 
    <option value="las">LAS</option> 
    <option value="br">BR</option> 
    <option value="ru">RU</option> 
    <option value="oce">OCE</option> 
    <option value="kr">KR</option> 
</select> 

Даже если я пытаюсь выбрать другой регион, кроме значения по умолчанию (NA), когда форма представляется, значение для переменной области в $ _POST всегда остается как «na».

Кроме того, у меня есть сценарий, по форме представить:

<script> 
    $(function() { 
     $('#myForm').on('submit', function (e) { 

      e.preventDefault(); 

      $.ajax({ 
      type: 'post', 
      url: 'redirect.php', 
      data: $('form').serialize(), 
      success: function() { 
       location.reload(); 

      } 
      }); 

     }); 

     }); 
    </script> 

Моя форма:

<form id="myForm"> 
     <li id="search"> 
       <input type="text" name="name" id="name" placeholder="Search Word"/> 
       <input type="submit" style="position: absolute; left: -9999px; width: 1px; height: 1px;" tabindex="-1" /> 

       <select name="region" id="region"> 

        <option selected="selected" value="na">NA</option> 
        <option value="euw">EUW</option> 
        <option value="eune">EUNE</option> 
        <option value="tr">TR</option> 
        <option value="lan">LAN</option> 
        <option value="las">LAS</option> 
        <option value="br">BR</option> 
        <option value="ru">RU</option> 
        <option value="oce">OCE</option> 
        <option value="kr">KR</option> 

       </select> 


      </li> 
</form> 

redirect.php

<?php 
    session_start(); 

    if (isset($_POST['name']) && isset($_POST['region'])) { 
     $_SESSION['name'] = $_POST['name']; 
     $_SESSION['region'] = $_POST['region']; 

    } 
    if (isset($_POST['name'])) { 
     $_SESSION['name'] = $_POST['name']; 
     $_POST['region'] = 'na'; // I think this is where the problem persists 
     $_SESSION['region'] = $_POST['region']; 
    } 

>

Кажется, что $ _POST ['region'] не установлен. Я включил session_start в оба файла. Любая помощь будет оценена по достоинству. Спасибо.

+1

Вам не нужен JS для этого. Браузер будет обрабатывать это. Как вы отправляете форму? –

ответ

0

ОП изменил тему вопроса, оставив мой код здесь только для справки, но я полностью понимаю, что это не ответ.

Я написал быструю CodePen, чтобы проверить, что происходит в вашей проблеме, я не проверял с помощью POST-запроса, потому что у меня нет вашего кода, но с jQuery мне нужно было только удалить выбранный атрибут от НС:

http://codepen.io/leofontes/pen/ZBGZZZ

<select name="region" id="region"> 

    <option value="na">NA</option> 
    <option value="euw">EUW</option> 
    <option value="eune">EUNE</option> 
    <option value="tr">TR</option> 
    <option value="lan">LAN</option> 
    <option value="las">LAS</option> 
    <option value="br">BR</option> 
    <option value="ru">RU</option> 
    <option value="oce">OCE</option> 
    <option value="kr">KR</option> 
</select> 

<button id="button">Something</button> 

И JS:

$(document).ready(function() { 
    $("#button").click(function() { 
     alert($('#region').val()); 
    }); 
}); 

Просто нажмите на кнопку, чтобы увидеть, какой вариант был выбран, он работает .. Не 100% уверен, если это то, о чем шла ваша проблема, но я уверен, что все было так просто.

Надежда это то, что вы искали, если не дайте мне знать, так что я могу помочь вам еще немного;)

+0

Привет за ваш вклад! Я попытался удалить выбранный атрибут, но он ничего не делает: /, я отредактировал свой пост с кодом отправки формы. Я думаю, что это как-то связано с этим, не совсем уверенным. В моем теге формы у меня есть тег ввода типа: текст, который займет ключевое слово, тип ввода: отправить и сразу после этого меню выбора. Знаете ли вы, влияет ли расположение этих элементов на форму submit? – CSishard

+0

@CSishard лично я не использую функцию Serialize(), я обычно выбираю и отправляю вход самостоятельно, чтобы предотвратить подобные ситуации. Можете ли вы добавить всю форму? Возможно, некоторая другая ошибка предотвращает сбор данных правильно. Кроме того, попробуйте добавить выбранный атрибут «selected» к другому параметру и посмотреть, изменился ли результат – leofontes

+0

. Я обнаружил, что выпадающее меню не было проблемой. Полностью изменил тему. Если бы вы все еще могли помочь мне, это было бы здорово :) – CSishard

0

Попробуйте это:

var $region = $('#region'); 
$region.val([]);//now $('#region').val() return undefined 
//exacttext version 
region.find('option').filter(function (index, elem) { return $(this).html() === textSearchValue; }).prop("selected",true); 
//containstext version 
region.find('option').filter(function (index, elem) { return $(this).html().indexOf(textSearchValue)>0; }).prop("selected",true); 

PS: всегда кэшировать элементы переменную $

0

то, что я обычно делаю это:

$(document).on("change",function(){ 
    if($("#region").val()!="na"){ 
    var region=$("#region").val(); 
    alert(region); 
    } 
}); 

с этим вы будете чтобы проверить, действительно ли значение изменяется, и теперь вы можете использовать эту переменную везде, где хотите. И он будет работать каждый раз, когда значение изменится, пока вы не отправите Надеюсь, что это поможет!

+0

, если вы хотите сделать это, например: – poucel95

+0

Выберите страну: США, и когда они выберут США, другой выпад будет заполнен всеми штатами из США, что вы можете сделать это внутри функции изменения, напишите свой ajax, поэтому вместо нажатия submit, как только они выберут страну (в вашем случае регион), следующий раскрывающийся список автоматически заполнит – poucel95

+0

Я имел в виду внутри IF, который находится внутри $ (document) .on ("change", function() {}) – poucel95

0

Ok так я узнал, что я сделал неправильно ... Это из-за небольшой ошибки в упорядочении условными в redirect.php

if (isset($_POST['name'])) { 
    $_SESSION['name'] = $_POST['name']; 
    $_POST['region'] = 'na'; // Where I thought the problem persisted 
    $_SESSION['region'] = $_POST['region']; 
} 

Эта часть кода всегда будет работать даже после того, как установлены переменные $ _POST. Мое намерение состояло в том, чтобы он запускался, когда $ _POST для региона не был установлен. В результате я изменил его на следующее, и это сработало.

if (!isset($_POST['region'])) { 
     $_SESSION['name'] = $_POST['name']; 
     $_POST['region'] = 'na'; 
     $_SESSION['region'] = $_POST['region']; 
    } 

Еще раз спасибо всем!