PHP: при выборе изменения отправляйте форму в self

#php #javascript #forms #postback

#php #javascript #формы #обратная отправка

Вопрос:

В основном это то, что говорится в названии.. У меня есть форма с элементом управления select, который я хочу заставить форму отправлять обратно в self при изменении.

 $bmsclientlist = $clientobj->getBMSClientList();

echo '<form name="changebmsid" method="post" action="' . $_SERVER['PHP_SELF'] . '"><select name="bmsid">';

foreach($bmsclientlist as $bmsclient) {
    $var = '';
    if($client['bmsid'] == $bmsclient['id']) {
        $var = ' selected="selected"';
    }
    echo '<option value="' . $bmsclient['id'] .'"'. $var .'>' .$bmsclient['clientname'] . '</option>';
}

echo '</select></form>';

$backupobj = new AdminBackup();

if(isset($_POST['bmsid']){
    $statusarray = $backupobj->getStatusTotalsbyId($_POST['bmsid']);
}else{
    $statusarray = $backupobj->getStatusTotals();
}
  

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

Любая помощь наиболее ценна!

Спасибо,

Джонси

Ответ №1:

Это <select> который отправит родительскую форму

 <form method="post" action="#" name="myform">
    <select name="x" onchange="myform.submit();">
        <option value="y">y</option>
        <option value="z">z</option>
    </select>
</form>
  

Все, что вам нужно сделать, это дать имя вашему <form> и добавить событие onchange к вашему <select>


Адам прав. Хотя приведенный выше пример работает отлично, я бы сделал это следующим образом:

Используя jQuery, но есть много других доступных опций…

 <head>
<script type="text/javascript" src="jquery.js"></script>
<script>
    $(document).ready(function(){
        $('#mySelect').change(function(){
            myform.submit();
        });
    });
</script>
</head>
  

и форма

 <body>
<form method="post" action="" name="myform">
    <select name="x" id="mySelect">
        <option value="y">y</option>
        <option value="z">z</option>
    </select>
</form>
</body>
  

Комментарии:

1. Обратите внимание, что, хотя это основной способ сделать это, это не семантический код — onchange следует абстрагировать в заголовок документа или внешний скрипт, используя событие загрузки dom, такое как jquery $(document).ready

2. Хороший простой пример ненавязчивого js.

3. В вашем примере, в чем преимущество использования jQuery? @adam, не могли бы вы отредактировать ответ Андре, чтобы отразить ваши предложения? Мне любопытно, как сделать это лучше.

4. @RyanEdwards, в комментарии Адама упоминалась первая часть моего ответа. Часть jQuery уже отражает его предложения с помощью jQuery, размещенного в документе <head> . Преимущества использования jQuery? Вы можете выполнить то же самое с меньшим количеством кода.

5. this.form.submit(); проще использовать повторно.

Ответ №2:

быстрое исправление заключается в следующем:

Добавьте атрибут onchange в свой список выбора

 <select name="bmsid" onchange="javascript: form.submit();">
  

Ответ №3:

Измените ваше меню выбора на это:

 <select name="bmsid" onchange="document.forms['changebmsid'].submit()">
  

Обновить

Вот другой возможный подход:

 <script type="text/javascript">
    window.onload = function() {
        document.forms['myform'].addEventListener('change', function() {
            this.submit();
        }, true);
    };
</script>
  

Поместите это в любое место на своей странице, и вы сможете оставить свою форму такой, какая она есть.