[help] Как сделать выпадающие списки Страна - Регион - Город

Тема в разделе "Другие языки", создана пользователем ant1-pa, 20 фев 2009.

Статус темы:
Закрыта.
Модераторы: Цукер
  1. ant1-pa

    ant1-pa

    Регистр.:
    3 ноя 2007
    Сообщения:
    448
    Симпатии:
    96
    Добрый день, может у кого-то есть скрипт с выпадающими спискмаии и с использованием jquery, ajax или json, чего угодно, лишь бы все работало + с базой данных.

    Вот БД:
    http://ekimoff.ru/download/db_city/city.rar

    есть еще вот такой код, если кто знает как прикрутить:
    HTML:
    
      this.placeSelect = {
            init: function () {
                this.country = $('country');
                this.region = $('region');
                this.city = $('city');
                
                this.country && (new Request({
        			method: 'post',
        			url: '/ajax/geo/',
        			data: { 'action': 'listCountries' },
        			onComplete: (function (_this) {
        				return function (responseHTML, responseXML) {
        				    if (responseXML && responseXML.getElementsByTagName('error').length) {
        				        tm.log(responseXML.getElementsByTagName('error')[0].firstChild.nodeValue);
        				        return false;
        				    };
        				    if (responseXML && (responseXML.getElementsByTagName('message')[0].firstChild.nodeValue == 'ok')) {
        				        var countries = responseXML.getElementsByTagName('country');
        				        for (var i=0, l=countries.length; i<l; i++) {
        				            var m = countries[i];
        				            (new Element('option', {'value': m.getAttribute('id'), 'html': m.firstChild.nodeValue })).inject(_this.country, 'bottom');
        				        };
        				    };
        				};
        			})(this)
        		}).send());
                
                this.country && this.country.addEvent('change', (function (e) {
            		new Request({
            			method: 'post',
            			url: '/ajax/geo/',
            			data: { 'action': 'listRegions', 'countryId': $(e.target).value },
            			onComplete: (function (_this) {
            				return function (responseHTML, responseXML) {
            				    if (responseXML && responseXML.getElementsByTagName('error').length) {
            				        tm.log(responseXML.getElementsByTagName('error')[0].firstChild.nodeValue);
            				        return false;
            				    };
            				    if (responseXML && (responseXML.getElementsByTagName('message')[0].firstChild.nodeValue == 'ok')) {
            				        _this.region.set('html', '');
            				        (new Element('option', {'value': -1, 'html': 'Выберите регион' })).inject(_this.region, 'bottom');
            				        _this.city.set('html', '');
            				        (new Element('option', {'value': -1, 'html': 'Выберите город' })).inject(_this.city, 'bottom');        				        
            				        
            				        _this.region.setStyle('visibility', 'visible');
            				        
            				        var regions = responseXML.getElementsByTagName('region');
            				        for (var i=0, l=regions.length; i<l; i++) {
            				            var m = regions[i];
            				            (new Element('option', {'value': m.getAttribute('id'), 'html': m.firstChild.nodeValue })).inject(_this.region, 'bottom');
            				        };
            				    };
            				};
            			})(this)
            		}).send();
                }).bindWithEvent(this));
                
                
                this.region && this.region.addEvent('change', (function (e) {
            		new Request({
            			method: 'post',
            			url: '/ajax/geo/',
            			data: { 'action': 'listCities', 'regionId': $(e.target).value },
            			onComplete: (function (_this) {
            				return function (responseHTML, responseXML) {
            				    if (responseXML && responseXML.getElementsByTagName('error').length) {
            				        tm.log(responseXML.getElementsByTagName('error')[0].firstChild.nodeValue);
            				        return false;
            				    };
            				    if (responseXML && (responseXML.getElementsByTagName('message')[0].firstChild.nodeValue == 'ok')) {
            				        _this.city.set('html', '');
            				        (new Element('option', {'value': -1, 'html': 'Выберите город' })).inject(_this.city, 'bottom');        				                				        
            				        _this.city.setStyle('visibility', 'visible');
            				        
            				        var cities = responseXML.getElementsByTagName('city');
            				        for (var i=0, l=cities.length; i<l; i++) {
            				            var m = cities[i];
            				            (new Element('option', {'value': m.getAttribute('id'), 'html': m.firstChild.nodeValue })).inject(_this.city, 'bottom');
            				        };
            				    };
            				};
            			})(this)
            		}).send();
                }).bindWithEvent(this));    
            }
        };    
    

    Спасибо всем кто поможет
     
  2. Sakhalinec

    Sakhalinec Создатель

    Регистр.:
    8 янв 2009
    Сообщения:
    33
    Симпатии:
    0
    нужно сделать проверка на событие в первых двум списках

    не знаю поможет тебе или нет . но вот подобное реализованное с использованием аякса.
    только тут 2 списка.

    <tr>
    <td width="50">
    <script language="JavaScript" src="/scripts/board.js" type="text/javascript"></script>
    <p>страна</p>
    <select name='firms' id='firms' onChange='doChange(this, "страна")' >
    <option value='0'>страна</option>
    <option>
    здесь делаешь вывод из базы</option>
    </select> </td>
    <td width="50"><p>город</p>
    <select name='models' id='models'>
    <option value='0' selected>город</option>
    </select></td>
    </tr>


    а функция doChange прописана в файле
     

    Вложения:

    • board.rar
      Размер файла:
      524 байт
      Просмотров:
      31
  3. ant1-pa

    ant1-pa

    Регистр.:
    3 ноя 2007
    Сообщения:
    448
    Симпатии:
    96
    это ты наверно с рипа ярска взял, и немного изменил?
    этот вариант может и подходит, но к нему не смогу свою БД подкрутить.
     
Статус темы:
Закрыта.