Poniższy skrypt działa prawidło w następujący sposób: po wybraniu województwa w kolejnym selekcie pojawią się powiaty pobrane z bazy danych. Wszystko pięknie. Ale chciałbym dodań funkcjonalność w postaci: po wybraniu województwa pojawiają się powiaty oraz opcja --BEZ ZNACZENIA-- czyli de fakto pobieranie danych z mysqla z warunkiem województwa (bez powiatów). Dodanie <option value="0">BEZ ZNACZENIA</option> do index.php nie działa. Aha po wybraniu województwa od razu w powiecie wyskakuje pierwszy rekord z bazy jako option (jako wybrany).
Działam na lekko zmodyfikowanym skrypcie select-chain, w select-chain.js mogą być pozostałości starego kodu. Dziękuję za pomoc
index.php
<?php include('config.php'); include('function.php'); ?> <script src="js/jquery-1.4.2.js" type="text/javascript"></script> <script src="js/select-chain.js" type="text/javascript" charset="utf-8"></script> <script type="text/javascript"> <!-- $(function () { var cat = $('#wojewodztwo'); var el = $('#powiat'); el.selectChain({ target: attr, url: 'function.php', data: { ajax: true, anotherval: "anotherAction" } }); // note that we're assigning in reverse order // to allow the chaining change trigger to work cat.selectChain({ target: el, url: 'function.php', data: { ajax: true } }).trigger('change'); }); //--> </script> <form action="firma.php?s=wyszukiwarka" method="post" id="autokarform"> <div class="form"> <label for="wojewodztwo">Wojewódźtwo</label> <select class="text" name="wojewodztwo" id="wojewodztwo" size="1"> <option value="">---WYBIERZ---</option> <?php $query = "SELECT * FROM autokar_wojewodztwo"; } ?> </select> <label for="powiat">Powiat</label> <select class="text" id="powiat" name="powiat" size="1"></select> <input class="button" name="submit" type="submit" value="Szukaj" /> </div>
function.php
if (@$_REQUEST['ajax']) { if ($con == false) if ($base) { $results = mysql_query('select * from autokar_powiat where id_wojewodztwo="' . strtolower(mysql_real_escape_string(strip_tags($_REQUEST['wojewodztwo']))) . '"'); $json[] = '{"id_powiat" : "' . $row->id_powiat . '", "powiat" : "' . $row->powiat . ' "}'; } } else { } }
select-chain.js
(function ($) { $.fn.selectChain = function (options) { var defaults = { key: "id_powiat", value: "powiat" }; var settings = $.extend({}, defaults, options); if (!(settings.target instanceof $)) settings.target = $(settings.target); return this.each(function () { var $$ = $(this); $$.change(function () { var data = null; if (typeof settings.data == 'string') { data = settings.data + '&' + this.name + '=' + $$.val(); } else if (typeof settings.data == 'object') { data = settings.data; data[this.name] = $$.val(); } settings.target.empty(); $.ajax({ url: settings.url, data: data, type: (settings.type || 'get'), dataType: 'json', success: function (j) { var options = [], i = 0, o = null; for (i = 0; i < j.length; i++) { // required to get around IE bug (http://support.microsoft.com/?scid=kb%3Ben-us%3B276228) o = document.createElement("OPTION"); o.value = typeof j[i] == 'object' ? j[i][settings.key] : j[i]; o.text = typeof j[i] == 'object' ? j[i][settings.value] : j[i]; settings.target.get(0).options[i] = o; } // hand control back to browser for a moment setTimeout(function () { settings.target .find('option:first') .attr('selected', 'selected') .parent('select') .trigger('change'); }, 0); }, error: function (xhr, desc, er) { // add whatever debug you want here. alert("an error occurred"); } }); }); }); }; })(jQuery);
Wymyśliłem sam po 24h przerwie:
W pliku function.php w linii nr 10 powinno być:
$json[] = '{"id_powiat" : "0", "powiat" : "--BEZ ZNACZENIA--"}';
i koniec, do zamknięcia, przepraszam za zaśmiecanie