garakh / kladrapi-jsclient Goto Github PK
View Code? Open in Web Editor NEWЭто устаревший плагин. Используйте новый https://github.com/fias-api/jquery
Это устаревший плагин. Используйте новый https://github.com/fias-api/jquery
День добрый. Прошу помощи в следующих вопросах.
Подскажите пожалуйста, почему встречаются ситуации, когда у нескольких домов по соседству с нужным мне домом одинаковые 19ти значные ID? И если он не является уникальным, то как такой создать?
И второй вопрос, как зная ID дома, получить город, улицу и номер дома? (если не сложно, то простым примером)
Прошу простить за банальные вопросы, почти не было практики с JavaScript.
подскажите как к полученным результатам добавить свои значения ? не все улицы имеются в КЛАДР
В firefox 34 для Win7 не работает кладр - каждый XMLHttpRequest в firebug отображается со статусом aborted ( нажатие клавиши на клавиатуре = одному XMLHttpRequest )
В firefox 34 для Kubuntu 14.10 64bit и во всех других браузерах (IE, Chrome, Chromium, Opera) - проблемы не возникает.
Jquery версии 1.7.2
Кладр пробовали 2.X И 1.X версии
Код, к-й используется:
<script type="text/javascript">
(function($) {
$(function() {
var container = $('#brthForm');
// Автодополнение областей
container.find('#region').kladr({
token: 'скрыт',
key: 'скрыт',
// labelFormat: LabelFormat,
type: $.kladr.type.region,
select: function(obj) {
// Изменения родительского объекта для автодополнения улиц
container.find('#region').attr('data-rparent-id', obj.id);
$( '#rparent_id' ).val( obj.id );
$( '#okato' ).val( obj.okato );
}
});
// Автодополнение населённых пунктов
container.find('#city').kladr({
token: 'скрыт',
key: 'скрыт',
withParents: false,
// labelFormat: LabelFormat,
type: $.kladr.type.city,
parentType: $.kladr.type.region,
parentId: function() { return container.find('#region').attr('data-rparent-id') },
select: function(obj) {
// Изменения родительского объекта для автодополнения улиц
$( '#okato' ).val( obj.okato );
}
});
});
}) (jQuery);
</script>
Пробовал безуспешно заменить метод getJSON на ajax
$.ajax({
dataType: "json",
url: $.kladr.url + "?callback=?",
data: toApiFormat(query),
mimeType:'text/plain',
}).done(function (data) {
if (timeout) {
callback(data.result || []);
clearTimeout(timeout);
}
});
Есть только название города, с помощью api получаю id, как программно получить регион и первый найденный район?
Здравствуйте.
Во-первых, спасибо за ваш труд, отличный проект.
Проблема: в режиме oneString плагин не возращает дом по query "москва клары цеткин 20" и улицу по query "нахабино красноармейская".
Без oneString оба объекта возвращаются.
Проверить можете на вашем сайте в разделе с примерами.
Версия плагина 2.1.3
при наличии проспекта и улицы с одинаковым названием выбирает первое попавшее, что не всегда правильно.
например:
при поиске
.setValues({city:"Санкт-Петербург",street:"Ленина"},selector)
выдаст площадь.
ввод:
ул. Ленина - не помогает
если вместо названий вводить ид элементов, ничего не находит.
$('#street').kladr({ token: '-----', parentType: $.kladr.type.city, parentId: '2600000100000', type: 'street', check: function (obj) { console.log(obj); }, });
Соответственно #street это интуп с type="text".
Вопрос такой. console.log() срабатывает (и запросы соответственно отправляются) только до тех пор пока я ввожу что-то заведомо неверное (случайные строки, кракозябры, что угодно). Как только я ввожу что-то валидное на подобии "Ленина" он находит "пл. Ленина" и возвращает в obj объект с Лениным и все последующие запросы не отправляются при изменении #street. Почему так?
В примере с формами (в form.html) если предустановить значения города и улицы:
<div class="field"> <label>Город</label> <input type="text" name="city" value="Москва"> </div> <div class="field"> <label>Улица</label> <input type="text" name="street" value="Дорожная ул."> </div>
то значение улицы пропадает, это ошибка или можно как-то обойти такое поведение?
Можно ли разделять коллбэки для двух событий:
Возможно это уже можно сделать, но я не догоняю как.
Как задать регион по умолчанию?
Как исправить: возьмём example1 и добавим еще одно поле
Возникает описанная проблема. Но если вместо
$( '[name="street"]' ).kladr({
написать
$( '[name="street"]' ).each(function(){
$( this ).kladr({
то всё работает так, как нужно. Соответственно, нужно подобным образом изменить плагин.
if (options.parentType && !options.parentId)
{
console.error('parentType is defined and parentId in not');
return false;
}
Таким образом, если указано, что поле зависит от другого, то подсказка для него не будет появляться, пока не заполнено родительское.
В проекте используется django-pipeline, жмет статику.
При сборке выпадает вот такая ошибка:
ValueError: The file 'jquery.kladr/kladr/css/images/spinner.png' could not be found with <pipeline.storage.PipelineCachedStorage object at 0x7f41b9aabc10>
Т.е. css ссылается на несуществующий файл. Достаточно скопировать крутилку по этому пути и все заработает.
Добрый день. Подскажите как программно очистить поля ввода. Делаю так, но не выходит.
$region.kladr('controller').clear();
$district.kladr('controller').clear();
$city.kladr('controller').clear();
$street.kladr('controller').clear();
$building.kladr('controller').clear();
Заполняю поля тоже программно:
$.kladr.setValues({
region: getRegion(AdministrativeArea),
city: getСity(Locality),
street: getStreet(Thoroughfare),
building: Premise
});
Дело в том, что если поля street и building заполнены, а потом вызывается заполнение полей, но поля street и building пустые, остаются предыдущие значения. Из чего я делаю вывод что очистить поля у меня не вышло.
Давно планировал написать, всё руки никак не доходили. В связи с тем, что у меня сейчас практически нет свободного времени, я покидаю проект kladrapi-jsclient. Возможно я когда-нибудь вернусь, как это уже было в августе 2014, но в обозримом будущем это вряд ли произойдет. На данный момент проект лишился своего мейнтейнера. Если ты, дорогой мой коллега, заинтересован в развитии проекта, ты можешь взять эту обязанность на себя. Для этого напиши Илье ([email protected], https://github.com/garakh/) чтобы он тебя добавил в участники проекта.
А вызывается ли change при смене значения в инпуте?
Именно стандартное событие change.
Приветствую.
Такой вопрос:
если например в файле http://kladr-api.ru/content/examples/js/example4.js
в строку 219 вставить:
console.log(address);
то в консоле будет 2 строки, почему?
На моей карте есть передвигаемая метка, так вот их появляется две. в этом и проблема.
Вот что я вижу в консоли:
Failed to load http://kladr-api.ru/api.php?callback=jQuery32108009858212794962_1533629303183&contentType=city&oneString=true&withParent=true&limit=10&query=%D0%B2&_=1533629303195: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:8000' is therefore not allowed access.
Хочу подключить плагин к сайту на django. Плагин склонировал, запустил билд, вроде как подключил через webpack (не ругается что, например kladr is not a function).
В моём js файле всё предельно просто:
$('#id_region').kladr({
type: $.kladr.type.city
});
Очевидно, я делаю что-то не так, раз такого issue до сих пор нет, значит у других нет с этим проблем, но я почти целый день гуглю, пытаюсь справиться с этой ошибкой и делаю, вроде бы, всё как в exampl'ах.
Поясните пожалуйста, что делает эта функция, из-за нее невозможно сразу после загрузки страницы использовать setValueById (значение появляется и сразу исчезает).
$city.kladr({
type: $.kladr.type.city,
oneString: true
});
$city.kladr('controller').setValueById(8900000600000);
Без нее все замечательно работает. Заранее спасибо
Можно-ли вывести название улицы в месте с номером дома в одном input?
в примере form.html у вас показано как менять описание поля при выборе город/деревная и тд.
Как это сделать для заполненного поля ?
В простейшем случае
ac.on('touchstart mouseenter', 'li', function(){
ac.on('touchleave mouseleave', 'li', function(){
вместо
ac.on('mouseenter', 'li', function(){
ac.on('mouseleave', 'li', function(){
Не знаю, насколько кроссплатформенно, но мои проблемы решило. Ничего, что на русском?
По аналогии с buildAddress()
, чтобы можно было проанализировать objs
и выдать решение — отображать данный адрес в списке предлагаемых или нет.
Пример использования:
$.kladr.checkAddress = function (objs) {
var availOkatos = [ "45000000000", "46000000000", "41000000000", "40000000000" ];
if (availOkatos.indexOf(objs[0].okato) !== -1) {
return true;
}
return false;
}
Помогите, пожалуйста, а то не смог найти ничего подобного в документации, примерах…
Использую ваш плагин для jQuery. Программно вставляю данные в форму, использую конструкцию:
$region.kladr({type: $.kladr.type.region, verify: true});
$district.kladr({type: $.kladr.type.district, verify: true});
$city.kladr({type: $.kladr.type.city, verify: true});
$street.kladr({type: $.kladr.type.street, verify: true, withParents: true});
$building.kladr({type: $.kladr.type.building, verify: true});
$region.val(options.data.region).trigger('change');
$district.val(options.data.district).trigger('change');
$city.val(options.data.city).trigger('change');
$street.val(options.data.street).trigger('change');
$building.kladr({'verify': true});
$building.val(options.data.building).trigger('change');
на $street вылетает с: parentType must equal "city"
Commonjs не может импортировать
import 'jquery.kladr';
jquery.kladr.min.js:1 Uncaught ReferenceError: jQuery is not defined
Города нужно убрать, не знаю, фича ли это или баг...
Скриншот
http://dl1.joxi.net/drive/0000/0309/12597/160323/50d42ab836.jpg
Как можно решить, чтобы при вводе города во все города подключались области, регионы?
Например, Краснодарский край. Подставляется Краснодарский. Какой смысл подставлять наименования без типа объекта? Плюс к этому - не меняется label у текстового поля.
Пользуюсь плагином и заметила, что на Android в Firefox 40.0.3 плагин не работает. Запросы не отправляются.
Здравствуйте. Есть проблема, при вводе названия города (Сочи, к примеру),если пользователь не кликнет по другому полю, а сразу нажмет Enter, то data-kladr-id инпуту не присвоится. Как можно решить эту проблему?
Cталкнулся с проблемкой с jquery плагином. Тупил, час убил на поиск проблемы.
Оказалось, ваш плагин расширил класс Array методом unique, который переопределялся нашим движком (своя реализация Array.prototype.unique).
Как разультат, метод плагина 'labelFormat' работал некорректно.
Короче, я к чему эту поэму пишу. Вы, где-нибудь черканите в доках, мол Array.prototype.unique используем. А еще лучше, реализуйте array.unique внутри неймспейса плагина, отказавшись от экстенда прототипа, чтоб не было проблем с другими либами (глобальный неймспейс это не гуд, но многие мастадонты его все же используют). Мало ли другие тоже на эти грабли наступят.
Здравствуйте, у вас описано что type - перечисление используемых типов объектов. Список значений: region (область, регион), district (район), city (населённый пункт), street (улица), building (строение).
Но при этом если я указываю
.kladr({
type: "region,city" ИЛИ type: ["region", "city"]
});
И через запятую строкой и массивом и объектом, все не работает, к примеру есть город Киров, в разных областях, у вас выводится просто два раза г. Киров, через одну строку не походит т.к. не нужны улицы, как правильно задать что бы был регион или район + город, это баг что перечисление типов не работает?
kladrapi-jsclient/kladr/js/kladr.js
Line 679 in 6854f56
if ((event.which > 8) && (event.which < 46)) {
М.б. имелось в виду?
if ((event.which >= 8) && (event.which <= 46)) {
Если щас пулреквест закинуть, то ничего не будет? Или надо мейнтейнером стать?
Всем привет! На demo видно, что улицы могут быть: бульвары, ГСК, проспекты и т.д.
Возник вопрос, как можно не менять label street - а записать в input label+street
Пример:
им Павла Корчагина -> Бульвар им Павла Корчагина
Не могу понять как работает метод. Можно пример его использования показать? Этот метод позволяет проверить валидность введённых данных в форму? Если нет, то как это можно сделать? Заранее спасибо.
Форма ввода адреса одна на несколько стран, когда выбрана Россия, удобно пользоваться плагином, но если выбрать другую страну, то автокомплит продолжает работать.
Нельзя ли добавить какой-нибудь метод типа .stopComplete чтобы на время отключать функцию автокомплита?
Или возможно это уже есть?
Ошибка тут:
kladrapi-jsclient/kladr/js/kladr.js
Line 628 in c7f466b
(sorry, никогда не отправлял пулл-риквсеты, сейчас нет времени разбираться в этой процедуре…)
Использую автодополнение по городам:
type: $.kladr.type.city
typeCode: $.kladr.typeCode.city
Хотелось бы выводить в списке вариантов область для каждого города, на случай, если найдено несколько городов с одинаковым названием.
Например, город Мирный.
Здравствуйте! Подскажите как быть? На странице есть поле ввода, в немавтозаполнения работает отлично :) Есть кнопка создающая такое же поле программно рядом. И вот в нем уже не работает автозаполнение. Как к созданному программно полю можно подключить функционал. Заранее спасибо.
Вот код которым я его создаю.
<script>
$(function() {
$("#add").click(function () {
$("<div class='param'><div class='box'><input type='text' name='city' placeholder='Город'></div> ).insertBefore("#form_status_added");
})
});
</script>
в случаях использования стилей с медиа запросами $.offset() может работать не верно.
решает проблему стандартный getBoundingClientRect
function position() {
var inputOffset = $input[0].getBoundingClientRect(),
// inputOffset = $input.offset(),
inputWidth = $input.outerWidth(),
inputHeight = $input.outerHeight();
Добрый день
Не получается при выборе в SELECT передать названия улиц в 'user-adress'
В SELECT выбираются населенные пункты
$.kladr.url = 'http://kladr-api.ru/api.php';
$(function () {
// Form example
(function () {
var $container = $(document.getElementById('form'));
var $district = $container.find('[name="district"]'),
$city = $container.find('[name="city"]'),
$street = $container.find('[name="user-adress"]'),
$building = $container.find('[name="user-house"]');
$district.kladr('type', $.kladr.type.district);
$city.kladr('type', $.kladr.type.city);
$street.kladr('type', $.kladr.type.street);
$building.kladr('type', $.kladr.type.building);
// Отключаем проверку введённых данных для строений
$building.kladr('verify', false);
})();
});
//
// // //Агой //Агуй-Шапсуг //Вольное //Георгиевское //Греческий //Дедеркой //Дзеберкой //Кирпичное //
//<input autocomplete="off" maxlength="90" name="user-adress" id="user-adress" //class="component-cart-input size-4" value="" type="text">
//<input maxlength="3" name="user-house" id="user-house" class="component-cart-input size-2" //value="" type="text">
//
Добрый день, имеется проблема с дробными домами, просто нельзя ввести после знака "/" какие либо числа, сервер отвечает пустым результатом.
К примеру если в form.html ввести -
Город: Ставрополь
Улица: 50 лет ВЛКСМ
Дом: 8/2
То получаем ответ
{"searchContext":{"contentType":"building","streetId":"26000001000000300","query":"8\/2","limit":10},"result":[]}
Хотя этот дом был в подсказках и по тому, что отправляется на api query: "8/2" то это не проблема на js стороне а что то с сервером.
Постоянно получаю данную ошибку на простом примере. Есть поле с фиксированным городом. Подсказка нужна по адресам.
$('#client-address').kladr({
token: '...',
key: '...',
type: $.kladr.type.street,
parentType: $.kladr.type.city,
parentId: '7700000000000'
});
В итоге как только ввожу пару символов подсказки отваливаются (при это на первую букву реагируют). Наблюдается такое как локально, так и на внешней development-площадке
В чем может быть проблема?
Не работает с JQuery начиная с 3-й версии. Видимо, из-за того, что в ней нет свойства context.
Это нормально? Ведь я выбираю значение из выпадающего списка. Как его еще выбирать, если не кнопкой Enter?
Доброе время суток.
За счёт того, что объеденены 3 и 4 уровни кладр
ГГГ – код города;
ППП – код населенного пункта;
не возможно корректно вбить адрес например такой
Тамбовская Область, Город Мичуринск, Микрорайон Кочетовка, Улица Строительная, 10
Московская Область, Климовск Город, Южный Поселение, СНТ Весна-1 Улица
это как нибудь обходится?
Если вбивать адрес г.Москва, Зеленый проспект, д.83, то в результирующей строке будет г.Москва, ул. Зеленый, д.83. Что некорректно, т.к. такой улицы нет. В Комбобоксе при этом корректно предлагается проспект
Если набрать "москва", то всё ок
Если набрать "мос"+стрелка+enter - тоже ок
Если набрать "мос" и ткнуть мышкой в первую строку - "Неверно введено название населённого пункта"
Похоже, при нажатии мышкой, input
теряет фокус, валидация идёт с буквами "мос", и не проходит. Хотя в момент вызова check(null) в поле уже стоит "Москва" (и select() корректно вызван два раза).
Собственно вопрос до боли в зубах простой, есть плагин для joomla под виртуемарт.
ТЗ состоит в том чтобы избавить пользователя от необходимости вбивать город (по умолчанию город доставки один, СПб, да и то только пара районов. Как вывести город по умолчанию (без возможности правки) чтобы пользователь вбивал только адрес и дом (если я правильно понял, копать надо тут)
city.kladr({
token: token,
type: jQuery.kladr.type.city,
withParents: true,
labelFormat: LabelFormat,
verify: true,
select: function( obj ) {
//city.val(obj.typeShort+'. '+city.val());
//city.parent().find( 'label' ).text( obj.type );
street.kladr( 'parentType', jQuery.kladr.type.city );
street.kladr( 'parentId', obj.id );
building.kladr( 'parentType', jQuery.kladr.type.city );
building.kladr( 'parentId', obj.id );
city.change();
Log(obj);
},
check: function( obj ) {
if(obj) {
//city.parent().find( 'label' ).text( obj.type );
street.kladr( 'parentType', jQuery.kladr.type.city );
street.kladr( 'parentId', obj.id );
building.kladr( 'parentType', jQuery.kladr.type.city );
building.kladr( 'parentId', obj.id );
}
Log(obj);
}
});
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.