|
|
|
| Добрый день!
Пишу проект на 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 (города) состоит из ид города, имя города и ид области.
На выходе получаем первую работающую форму, далее, увы, не пашет.
Предполагаю, что это как то связано с
Вобщем, помогите хоть советом что ли.. наверняка кто-то с подобным сталкивался. | |
|
|
|
|
|
|
|
для: 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];
});
}
|
| |
|
|
|
|
|
|
|
для: 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`е "мм" выводит корректно. Хм.. | |
|
|
|
|
|
|
|
для: Free_World
(05.11.2009 в 11:15)
| | мб. значение id стоитпоместить в кавычки одинарные?
id='"+mm+"')}", | |
|
|
|
|
|
|
|
для: AlexSol
(05.11.2009 в 11:24)
| | нет, не помогло..
дошло до того, что я уже планирую отказаться от данной схемы и autocomplete в частности и написать свой код. Однако не хотелось бы.. | |
|
|
|
|
|
|
|
для: Free_World
(05.11.2009 в 11:31)
| | точно кавычки ) откройте фаербаг и смотрите где ошибка | |
|
|
|
|