Как отметить checkbox после ajax обновления?

123 4
A
На сайте с 04.11.2007
Offline
134
#11

spilden01, добавьте атрибут alt для удобства, чтобы не парсить текст.


<input type="checkbox" onclick="filter(this)" alt="комедия">Комедия
<input type="checkbox" onclick="filter(this)" alt="драма">драма

function filter(e) {
var a = [];
$(e).parent().find('input').each( function() {
if ( this.checked ) {
a.push( $(this).attr('alt') );
}
});
var xfield = a.join('|'); // <- ВОТ ТУТ ПОПРОБОВАТЬ '||', '&&', '&', '+'
if ( xfield != '' ) {
ShowLoading("Идет сортировка");
$.get('/xfsearch/'+encodeURIComponent(xfield)+'/', function(data){
HideLoading("Завершено");
$("#dle-content").html(data);
});
}
}
S0
На сайте с 25.04.2013
Offline
24
#12
asteroid:
spilden01, добавьте атрибут alt для удобства, чтобы не парсить текст.

<input type="checkbox" onclick="filter(this)" alt="комедия">Комедия
<input type="checkbox" onclick="filter(this)" alt="драма">драма

function filter(e) {
var a = [];
$(e).parent().find('input').each( function() {
if ( this.checked ) {
a.push( $(this).attr('alt') );
}
});
var xfield = a.join('|'); // <- ВОТ ТУТ ПОПРОБОВАТЬ '||', '&&', '&', '+'
if ( xfield != '' ) {
ShowLoading("Идет сортировка");
$.get('/xfsearch/'+encodeURIComponent(xfield)+'/', function(data){
HideLoading("Завершено");
$("#dle-content").html(data);
});
}
}

Разделять слова подошло &&, спасибо! В вашем примере стоит onclick, можно ли как то сделать, чтобы если галки нет, то фильтр не применяется.

---------- Добавлено 19.08.2015 в 14:03 ----------

Оба кода, работают, но, если выбрать например сначала драма а потом комедия, то ничего не отображается. Если наоборот то отображается как надо.

K
На сайте с 03.06.2015
Offline
45
#13

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

Нафига городить весь этот огород-хардкод, если и так все данные имеются и надо только их прогнать через мозг юзера.

---------- Добавлено 19.08.2015 в 16:49 ----------

spilden01:
Разделять слова подошло &&, спасибо!

У вас денормализованная бд? Тогда объяснимо.

MYSQL PHP JS HTML CSS SEO TXT США СССР
S0
На сайте с 25.04.2013
Offline
24
#14

с бд то зачем? без нее ведь можно

K
На сайте с 03.06.2015
Offline
45
#15

А где у него жанры хранятся? В файлах? Ну какая разница, все то же самое.

S0
На сайте с 25.04.2013
Offline
24
#16
kostyanet:
А где у него жанры хранятся? В файлах? Ну какая разница, все то же самое.

Никаких файлов, обычный текст в доп. поле.

K
На сайте с 03.06.2015
Offline
45
#17

Этот диагноз и был поставлен выше - у вас денормализованная бд. В теории вы не имеете права делать вот так && genre = "комедия", потому что текст в поле genre может быть любой, например комедия, коммедия, комедтя, камедия, comedy и тп.

Ну хорошо, а откуда вы берете список жанров, чтобы нарисовать все эти инпуты?

S0
На сайте с 25.04.2013
Offline
24
#18
kostyanet:
Этот диагноз и был поставлен выше - у вас денормализованная бд. В теории вы не имеете права делать вот так && genre = "комедия", потому что текст в поле genre может быть любой, например комедия, коммедия, комедтя, камедия, comedy и тп.

Ну хорошо, а откуда вы берете список жанров, чтобы нарисовать все эти инпуты?

есть доп поле, в нем написано: приключения, фэнтези, комедия

Текст в поле вписывается юзером при добавлении новости

Если перейти по адресу site.ru/xfsearch/приключения/ то можно увидеть новость с этим текстом.

Если перейти по адресу site.ru/xfsearch/приключения&фэнтези или site.ru/xfsearch/приключения&&фэнтези то будет почему то только одна новость, или новости с данным текстом, то есть, этот запрос применяется как будто только для одной новости.

K
На сайте с 03.06.2015
Offline
45
#19

Для сокращения итераций вкратце покажу как люди делают.

Надо завести таблицу например

table list_genre

id int

name varchar

text varchar null

а поле genre в продуктовой странице поменять на int

и добавить в запрос соединение кортежей

inner join list_genre as g on g.id = m.gid (или там genre_id)

чтобы получать название жанра из списка. Этот список затем станет основой для интерфейса выбора жанров. Его очень легко отрендерить, и по нему очень просто проверить какие жанры профтыкал юзер. С формой придут лишь те галки, которые отчекрыжены. Записав полученные данные в список вы увидите какие жанры выбрал юзер. Однако делать этого недо, вы просто запрашиваете из бд все выбранные жанры по полученным данным, потому что неполученные тут не нужны.

Например с формой придет массив $_POST['genre'], который надо проверить на вредность и превратить в строку для запроса.

select blah-blah-blah from movie as m blah-blah-blah where m.gid IN ('.join(',',$_POST['genre']).')

И все.

---------- Добавлено 19.08.2015 в 17:54 ----------

Зачем там text varchar null? Например чтобы приятно так вывести где-нибудь описание жанра. Может кто не знает что такое артхзауз. Еще можно туда image поле завести, с типичной иллюстрацией, и еще полезные для сводки поля.

Отсюда открывается возможность соорудить отдельную страницу посвященную жанрам и направлениям. Форматировать ее как статью и вот вам практически на халяву прибавка в индексе. Кроме того можно завести подсветку. Например в обзоре заменить [артхауз] на запрос инфы по жанру.

Ну то есть когда у вас есть данные, это хорошо и можно ими пользоваться или не пользоваться. А когда у вас нет данных, то можно только не пользоваться.

---------- Добавлено 19.08.2015 в 18:02 ----------

spilden01:
Текст в поле вписывается юзером при добавлении новости

Что и требовалось доказать. Юзер опечатался - у вас появился новый жанр.

---------- Добавлено 19.08.2015 в 18:04 ----------

spilden01:
о будет почему то только одна новость

Потому что вместо AND надо писать OR, или вместо && писать ||, или попросту юзать IN()

---------- Добавлено 19.08.2015 в 18:06 ----------

spilden01:
приключения&&фэнтези

Само собой формат урла никакого отношения к SQL запросу не имеет. Можете через черточку если черточек нет в названиях жанров, или через индекс жанров в той самой таблице.

S0
На сайте с 25.04.2013
Offline
24
#20

Довольно таки круто, но этого я не осилю(

Мне сгодится обычный js фильтр, из примеров выше, нужно бы только исправить тот нюанс((

123 4

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий