JQuery и Auto-populat выбирает

У меня есть простая страница, где я могу выбрать клиента, а затем я выбрал это автозаполнение для проектов, которые принадлежат клиенту. Я использую PHP/MySQL, чтобы получить результаты.

Я взглянул на это: http://remysharp.com/2007/01/20/auto-populating-select-boxes-using-jquery-ajax/ но я думаю, что это начинается с обоих полей на странице. Я пытался переработать код, но не очень хорошо.

 var client_id = $('#c_id').val();
    $.getJSON("../inc/get-projects.php", {id: client_id}, function(data){
        projects = $('#p_id');
        projects.empty();
        $.each(data, function() {
            var option = $('<option/>').attr('value', this.id).text(this.name);
            projects.append(option);
        });
    });

PHP:

<?php
    include "config.inc.php";
    $sth = mysql_query(
        sprintf(
        "SELECT c_id,p_id,p_title FROM projects WHERE c_id = %s",
        mysql_real_escape_string($_GET['id'])
        )
    );
    $projects = array();
    while($r = mysql_fetch_assoc($sth)) {
        $projects[] = array('id' => $r['p_id'], 'name' => $r['p_title']);
    }
    print json_encode($projects);
    exit;


?>

2 ответа

Если у вас есть HTML, как это:

<select id='clients'>...</select>
<select id='projects'>...</select>

Вы можете иметь код JQuery, как это:

$(document).ready(function() {
    var $clients = $('#clients');
    $clients.change(function() {
        var client_id = $clients.val();
        $.getJSON("getProjects.php", {id: client_id}, function(projects) {
            $projects = $('#projects');
            $projects.empty();
            $.each(projects, function() {
                var option = $('<option/>').attr('value', this.id).text(this.name);
                $projects.append(option);
            });
        });
    });
});

И затем getProjects.php возвращает что-то вроде:

$sth = mysql_query(
    sprintf(
    "SELECT * FROM projects WHERE client_id = %s",
    mysql_real_escape_string($_GET['id'])
    )
);
$projects = array();
while($r = mysql_fetch_assoc($sth)) {
    $projects[] = array('id' => $r['id'], 'name' => $r['name']);
}
print json_encode($projects);
exit;

Я не проверял все это, но, думаю, это более или менее то, что вы хотите.

редактировать - протестировано и работает, очевидно, это может быть не совсем то, что вам нужно, но это дает вам представление о том, как это сделать. Надеюсь, поможет.

редактировать 2 - проблема с вашим кодом здесь:

$.getJSON("../inc/get-projects.php", {id: client_id}, function(projects){
    projects = $('#p_id');
    projects.empty();
    $.each(projects, function() {
        var option = $('<option/>').attr('value', this.id).text(this.name);
        projects.append(option);
    });
});

Вы перезаписываете projects перешел в функцию с projects во 2-й строке. Я использовал $ в моем коде, чтобы различить два, что, по общему признанию, возможно, не лучшим из способов. Чтобы исправить, измените код на это:

$.getJSON("../inc/get-projects.php", {id: client_id}, function(data){
    projects = $('#p_id');
    projects.empty();
    $.each(data, function() {
        var option = $('<option/>').attr('value', this.id).text(this.name);
        projects.append(option);
    });
});
Другие вопросы по тегам