#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>
Поместите это в любое место на своей странице, и вы сможете оставить свою форму такой, какая она есть.