Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru Стол заказов Автокамплит для xfield. Срочно

Автокамплит для xfield. Срочно


 Lady    07.08.2014    Стол заказов    1210    13

Доп. поля на странице добавления новости выводятся не общим тегом, а по отдельности, так например:

<input type="text" name="xfield[obl]" id="xfield[obl]" value="">


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

Все варианты должны браться из текстового файла или же просто списком из кода. Их будет не очень много.
Обязательно должна быть возможность множественного выбора через запятые.

Искала, пыталась своими силами, но увы, не вышло. Нашла неплохой вариант: http://recens.ru/jquery/plugin_auto_complete.html (там вторая форма - множественный выбор - очень даже подходит). Необходимо реализовать нечто подобное на дле.

Комментарии пользователей (13)

FastFud
50

1599 | 588

FastFud - 7 августа 2014 02:29 - Юзер


Lady
65 | 22

Lady - 7 августа 2014 02:38 - Юзер

FastFud, я нашла массу вариантов, но они все не работают или неправильно работают в addnews...

Например, вот:

<link rel="stylesheet" href="//code.jquery.com/ui/1.11.0/themes/smoothness/jquery-ui.css">
<script src="//code.jquery.com/jquery-1.10.2.js"></script>
<script src="//code.jquery.com/ui/1.11.0/jquery-ui.js"></script>
<link rel="stylesheet" href="/resources/demos/style.css">

<script>
$(function() {
var availablemags = [
"ActionScript",
"AppleScript",
"Asp",
"BASIC",
"C",
"C++",
"Clojure",
"COBOL",
"ColdFusion",
"Erlang",
"Fortran",
"Groovy",
"Haskell",
"Java",
"javascript",
"Lisp",
"Perl",
"PHP",
"Python",
"Ruby",
"Scala",
"Scheme"
];
function split( val ) {
return val.split( /,\s*/ );
}
function extractLast( term ) {
return split( term ).pop();
}
$( "#mags" )
// don't navigate away from the field on tab when selecting an item
.bind( "keydown", function( event ) {
if ( event.keyCode === $.ui.keyCode.TAB &&
$( this ).autocomplete( "instance" ).menu.active ) {
event.preventDefault();
}
})
.autocomplete({
minLength: 0,
source: function( request, response ) {
// delegate back to autocomplete, but extract the last term
response( $.ui.autocomplete.filter(
availablemags, extractLast( request.term ) ) );
},
focus: function() {
// prevent value inserted on focus
return false;
},
select: function( event, ui ) {
var terms = split( this.value );
// remove the current input
terms.pop();
// add the selected item
terms.push( ui.item.value );
// add placeholder to get the comma-and-space at the end
terms.push( "" );
this.value = terms.join( ", " );
return false;
}
});
});
</script>


<div class="ui-widget">
<label for="mags">Tag programming languages: </label>
<input id="mags" size="50">
</div>


Рабочий код, который прекрасно функционирует в addnews. Но! Для поля mags. Как только я меняю на xfield[obl] - не работает((( Я уже сутки бьюсь над этим вопросом

Lady
65 | 22

Lady - 7 августа 2014 02:43 - Юзер

Т.е. все дело в квадратных скобках xfield[obl].
Это можно как-то обойти?

FastFud
50

1599 | 588

FastFud - 7 августа 2014 02:45 - Юзер

А если так:
$( "#xfield_holder_text input" )

<tr id="xfield_holder_text" uid="essential">
<td class="xfields" colspan="2"><input type="text" name="xfield[text]" id="xfield[text]" value="" rel="essential">&nbsp;&nbsp;(обязательно)</td>
</tr>

Lady
65 | 22

Lady - 7 августа 2014 03:01 - Юзер

В коде три вхождения mags:

$(function() {
var availablemags = [

$( "#mags" )

availablemags


Нужно все заменить на xfield_holder_text input?

FastFud
50

1599 | 588

FastFud - 7 августа 2014 03:08 - Юзер

Как угодно, если будет несколько полей то да, + к тому что придется для каждого поля писать такой же код или же придумать чтобы был один код который обрабатывал несколько полей.

FastFud
50

1599 | 588

FastFud - 7 августа 2014 03:12 - Юзер

Для начала попробуйте с один элементом а я посмотрю как упростить это дело.

Lady
65 | 22

Lady - 7 августа 2014 03:18 - Юзер

Но ведь mags и id в input должны совпадать, иначе подсказки не выводятся

...Пробовала - увы, не вышло. Единственный выход, который я вижу, как-то заставить скрипт читать квадратные скобки в имени xfield.

FastFud
50

1599 | 588

FastFud - 7 августа 2014 03:29 - Юзер


Lady
65 | 22

Lady - 7 августа 2014 03:30 - Юзер

Урааа! Нашла решение! Делюсь, может пригодится кому:

В
<input type="text" name="xfield[obl]" id="xfield[obl]" value="">
заменяем id="xfield[obl]" на id="xf_obl". Это же значение xf_obl прописываем в коде вместо mags. И все работает :)

В данный момент скрипт такой:

<script>
$(function() {
var availablexf_obl = [
"ActionScript",
"AppleScript",
"Asp"
];
function split( val ) {
return val.split( /,\s*/ );
}
function extractLast( term ) {
return split( term ).pop();
}
$( "#xf_obl" )
// don't navigate away from the field on tab when selecting an item
.bind( "keydown", function( event ) {
if ( event.keyCode === $.ui.keyCode.TAB &&
$( this ).autocomplete( "instance" ).menu.active ) {
event.preventDefault();
}
})
.autocomplete({
minLength: 0,
source: function( request, response ) {
// delegate back to autocomplete, but extract the last term
response( $.ui.autocomplete.filter(
availablexf_obl, extractLast( request.term ) ) );
},
focus: function() {
// prevent value inserted on focus
return false;
},
select: function( event, ui ) {
var terms = split( this.value );
// remove the current input
terms.pop();
// add the selected item
terms.push( ui.item.value );
// add placeholder to get the comma-and-space at the end
terms.push( "" );
this.value = terms.join( ", " );
return false;
}
});
});
</script>


Для вывода использую:
<div class="ui-widget">
<label for="xf_obl">Название: </label>
<input type="text" name="xfield[obl]" id="xf_obl" value=""></div>



FastFud, спасибо вам за участие. Вы удалили пример кода для нескольких элементов, если не трудно, подскажите, как упростить, ведь полей много.

upd: вижу по ссылке выше, как сделать для нескольких элементов. Спасибо вам большое!

ПафНутиЙ
1065

3396 | 2434

ПафНутиЙ - 7 августа 2014 12:05 - Админ

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

Каков вопрос - таков и ответ. Просто помните об этом.

fh79655l123
11

206 | 25

fh79655l123 - 7 августа 2014 20:10 - Юзер

Можно ли как то для автозаполнения использовать все титлы новостей или лучше сделать все титлы отдельной категории??

ПафНутиЙ
1065

3396 | 2434

ПафНутиЙ - 7 августа 2014 20:13 - Админ

плагин на вход принимает любые, правильно сформированные, даные (лучше конечно, если это будет json массив)

Каков вопрос - таков и ответ. Просто помните об этом.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте