Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Реализация метода выбора Область->Город->Компания + JQuery Autocomplete
 
 автор: Free_World   (05.11.2009 в 08:29)   письмо автору
 
 

Добрый день!

Пишу проект на Pylons и собственно сталкнулся с такой проблемой. На странице есть формы ввода в такой последовательности: Область, Город, Компания. Первоначально формы Город и Компания имеют атрибут ReadOnly.
Пользователь сперва выбирает Область, затем Город (который находится в этой обл), затем компанию.
Собственно код:

..............................................
<body>
..............................................
<script type="text/javascript" src="/jquery/jquery.autocomplete-1.0.2.pack.js"></script>
<script type="text/javascript"><!--
$(document).ready(function() {
  $('#sub_name').autocomplete('/utils/sub', {
    width: 200,
    minChars: 1,
    selectFirst: true,
    maxItemsToShow: 15,
    formatItem: function(item) {
      return '<div>'+item[0]+'</div>'; # выводим список областей
    }
  }).result(function(event, item) {
    $('#sub_id').attr('value',item[1]);
    $('#cit_name').attr('readonly', 0);
    var mmm = item[1]; # получаем ид области
    var m = true;
    return item[0]; # вставляем в форму выбранную область
  });
});
# далее если область выбрана, то работаем с городами
if (m == true) {
$(document).ready(function() {
  $('#cit_name').autocomplete("${h.url_for(controller='utils',action='cit',id="+mmm+")}", {
    width: 200,
    minChars: 1,
    selectFirst: true,
    formatItem: function(item) {
      return '<div>'+item[0]+'</div>';
    }
  }).result(function(event, item) {
    $('#cit_id').attr('value',item[1]);
    return item[0];
  });
});
}
# далее пока не капаю, хотелось бы разобраться с первыми 2-мя формами
$(document).ready(function() {
  $('#com_name').autocomplete('/utils/com', {
    width: 200,
    minChars: 1,
    selectFirst: true,
    formatItem: function(item) {
      return '<div>'+item[0]+'</div>';
    }
  }).result(function(event, item) {
    $('#com_id').attr('value',item[1]);
    return item[0];
  });
});
--></script>
<div style="margin-top: 50px;"></div>
<form id="display_form" action="/personalarea/zakazaddprocess" method="post" enctype="multipart/form-data">
<table id="show_rek" cellspacing="0" style="background-color: #4897f9; color: black; position: relative; left: 30px;">
<tbody>
    <tr>
        <td class="interval" width="150">область</td>
        <td class="interval" width="150">город</td>
        <td class="interval" width="150">компания</td>
    </tr>
    <tr height="25">
        <td><input type="text" id="sub_name" name="sub_name"/></td>
        <td><input  readonly type="text" id="cit_name" name="cit_name"/></td>
        <td><input type="text" id="com_name" name="com_name"/></td>
    </tr>
</tbody>
</table>
</form>
.............................................


Таблица Subjects (области) состоит из ид и имени области
Таблица Citys (города) состоит из ид города, имя города и ид области.
На выходе получаем первую работающую форму, далее, увы, не пашет.
Предполагаю, что это как то связано с
if (m == true) {

Вобщем, помогите хоть советом что ли.. наверняка кто-то с подобным сталкивался.

  Ответить  
 
 автор: AlexSol   (05.11.2009 в 10:09)   письмо автору
 
   для: Free_World   (05.11.2009 в 08:29)
 

$(document).ready() схоже с body.onLoad() - все тири кода будут выполнены в момент загрузки документа.

вам нужно нужно оформить в отдельную функцию, код который должен быть выполненен по другому событию и вызывть ее. примерно так.


$(document).ready(function() { 
  $('#sub_name').autocomplete('/utils/sub', { 
    width: 200, 
    minChars: 1, 
    selectFirst: true, 
    maxItemsToShow: 15, 
    formatItem: function(item) { 
      return '<div>'+item[0]+'</div>'; # выводим список областей 
    } 
  }).result(function(event, item) { 
    $('#sub_id').attr('value',item[1]); 
    $('#cit_name').attr('readonly', 0); 
    var mmm = item[1]; # получаем ид области 
    ff()
    return item[0]; # вставляем в форму выбранную область 
  }); 
}); 
# далее если область выбрана, то работаем с городами 
function ff() { 

  $('#cit_name').autocomplete("${h.url_for(controller='utils',action='cit',id="+mmm+")}", { 
    width: 200, 
    minChars: 1, 
    selectFirst: true, 
    formatItem: function(item) { 
      return '<div>'+item[0]+'</div>'; 
    } 
  }).result(function(event, item) { 
    $('#cit_id').attr('value',item[1]); 
    return item[0]; 
  }); 




  Ответить  
 
 автор: Free_World   (05.11.2009 в 11:15)   письмо автору
 
   для: AlexSol   (05.11.2009 в 10:09)
 

Да, Вы правы. Сделал по вашему совету, только добавил ещё alert для проверки
$(document).ready(function() {
  $('#sub_name').autocomplete('/utils/sub', {
    width: 200,
    minChars: 1,
    selectFirst: true,
    maxItemsToShow: 15,
    formatItem: function(item) {
      return '<div>'+item[0]+'</div>';
    }
  }).result(function(event, item) {
    $('#sub_id').attr('value',item[1]);
    $('#cit_name').attr('readonly', 0);
    var m = item[1];
    init(m);
    return item[0];
  });
});

function init(mm) {
# проблемный участок
######################################################################
  $('#cit_name').autocomplete("${h.url_for(controller='utils',action='cit',id="+mm+")}", {
######################################################################
    width: 200,
    minChars: 1,
    selectFirst: true,
    formatItem: function(item) {
      return '<div>'+item[0]+'</div>';
    }
  }).result(function(event, item) {
    $('#cit_id').attr('value',item[1]);
    return item[0];
  });
  alert(mm); # проверяем наличие id`а области, для дальнейшей выборки городов
}


Если в проблемном участке вместо "mm" заранее поставить число, то всё нормально, в данном же случае выборки не происходит:( При этом в alert`е "мм" выводит корректно. Хм..

  Ответить  
 
 автор: AlexSol   (05.11.2009 в 11:24)   письмо автору
 
   для: Free_World   (05.11.2009 в 11:15)
 

мб. значение id стоитпоместить в кавычки одинарные?

id='"+mm+"')}",

  Ответить  
 
 автор: Free_World   (05.11.2009 в 11:31)   письмо автору
 
   для: AlexSol   (05.11.2009 в 11:24)
 

нет, не помогло..
дошло до того, что я уже планирую отказаться от данной схемы и autocomplete в частности и написать свой код. Однако не хотелось бы..

  Ответить  
 
 автор: AlexSol   (05.11.2009 в 11:33)   письмо автору
 
   для: Free_World   (05.11.2009 в 11:31)
 

точно кавычки ) откройте фаербаг и смотрите где ошибка

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования