Малцина мислят за вашия код
-
С AJAX опитайте да използвате JSON за изпращане и извличане на данни, това ще ви даде повече свобода относно vars и потребителски интерфейс.
-
Тъй като използвате jQuery, опитайте се да го използвате колкото е възможно повече, без да дефинирате онлайн събития, ако ги групирате в скрипта, ще ви бъде по-лесно да го управлявате.
-
Относно избраните е доста трудно да ги презаредите. В IE си спомням, че не можах да добавя опции, така че трябва да заредите ЦЕЛИЯ избор.
-
Не използвайте PHP mysql_query функции, са доста отхвърлени. Прочетете и приложете това: Как мога да предотвратя SQL инжектирането в PHP?
-
Когато зареждате стойности от AJAX, трябва да прикачите манипулатора към DOM елементите, ето защо с помощта на функцията .on(), за да сте сигурни, че тя прикачва манипулатора към елементите.
-
Опитайте се да използвате по-новите библиотеки на jQuery, тъй като те са по-бързи, мощни и имат повишена производителност, 1.4 е доста стара...
Написах ви пример за падащо меню на държави, използващи горните неща, за да ви дам представа как да го постигнете, вземете това, което смятате, че ви харесва:
index.html:
<html>
<head>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8/jquery.min.js"></script>
</head>
<body>
<script>
$(document).ready(function () {
$(document).on('change', '#div_country select, #div_state select', function () {
var $type = $(this).attr('data-type');
var $id = $(this).val();
if ( $id != -1 ) {
loadSelect( $type, $id );
}
});
function loadSelect( $type, $id ) {
$.ajax({
type: 'post',
url: 'states.php',
cache: false,
data: {
'type': $type
, 'id': $id
},
dataType: 'json',
success: function (data) {
if ( data.result == true ) {
if (data.html !== undefined) {
var $div = '';
if ( $type == 'country') {
$div = 'state';
} else {
$div = 'city';
}
$( "#div_" + $div ).html(data.html);
}
} else {
alert('Something went wrong!');
}
}
});
}
});
</script>
<div id="div_country">
<select data-type="country">
<option value="-1">Select Country</option>
<option value="1">Spain</option>
<option value="2">France</option>
<option value="3">Germany</option>
</select>
</div>
<div id="div_state">
<select data-type="state">
<option value="-1">Select Country</option>
</select>
</div>
<div id="div_city">
<select>
<option value="-1">Select State</option>
</select>
</div>
</body>
</html>
state.php
<?php
$type = isset( $_POST['type'] ) ? $_POST['type'] : '';
if ( !empty( $type ) ) {
switch ($type) {
case 'country':
$result = true;
$html = '<select data-type="state">
<option value="-1">Select State</option>
<option value="1">state 1</option>
<option value="2">state 2</option>
</select>';
break;
case 'state':
$result = true;
$html = '<select data-type="city">
<option value="-1">Select City</option>
<option value="1">city 1</option>
<option value="2">city 2</option>
</select>';
break;
default:
$result = false;
$html = '';
break;
}
}
$data = array(
'result' => $result,
'html' => $html
);
Добавих, за да ви дам представа как да го постигнете, това е самостоятелен пример и ще видите промените в кутията. Ще трябва да добавите PHP логиката, но исках да ви покажа по-добър подход, XD