Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Активная ссылка (https://javascript.ru/forum/dom-window/64848-aktivnaya-ssylka.html)

DarknesS 09.09.2016 08:19

Активная ссылка
 
Всем привет

Возник такой вопроc, почему при переходе через get, в данном случае t.php?action=***, ссылка становится не кликабельной а через js наоборот, вроде и без разницы, передается же get запрос, а вот сам линк без изменений

function Awards_Class_STE(action) {
	var obj=this;
	obj.div_id='#awards_list';
	obj.ste_loading=function (view) {
	if (view) $('#report_load').html(" :: <font color=black><b>[Загрузка...]</b></font>");
	else $('#report_load').html('');}
	obj.view=function (action) {obj.ste_loading(1);
	jQuery.get('t.php',{'action':action},
	function(response){$(obj.div_id).html(response); obj.ste_loading(0);},'html');}

}
var <?=STE_AW_JS?>=new Awards_Class_STE();


echo"".($_GET["action"]=="add"?"Добавить":"<a href=\"javascript:Awards.view('add')\">Добавить</a>")."";
echo"".($_GET["action"]=="awards" || !$_GET["action"]?"Список":"<a href=\"javascript:Awards.view('awards')\">Список</a>")."";
echo "<div id=\"awards_list\">\n";
$this->xml_template();
echo "</div>\n";


Спасибо за помощь

laimas 09.09.2016 17:02

Цитата:

Сообщение от DarknesS
echo"".($_GET["action"]=="add"?"Добавить":"<a href=\"javascript:Awards.view('add')\">Добав ть</a>")."";

Зачем выводить пустые строки в начале и конце строки?

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

'<a href="javascript:Awards.view(\'add\')">Добавить</a>'


Но странная логика вывода:

если равно add вывести текст "Добавить", иначе ссылка с этим же текстом
а если равно awards то текст "Список", иначе ссылка с этим же текстом.

Логику этого можно пояснить?

DarknesS 09.09.2016 18:49

Цитата:

если равно add вывести текст "Добавить", иначе ссылка с этим же текстом
а если равно awards то текст "Список", иначе ссылка с этим же текстом.
Да так и есть, если равно add, то ссылка перестает быть ссылкой, - только текст.

Суть проблемы в том, что после клика он не становится текстом, как будто get запроса и не было, хотя внутри див все нормально

laimas 09.09.2016 19:09

Цитата:

Сообщение от DarknesS
Да так и есть, если равно add, то ссылка перестает быть ссылкой, - только текст.

И проку от этого текста? Если ссылки по условию не должно быть, значит вообще ничего не должно быть. Хотя ссылка с псевдопротоколм javascript, это бомба, что щелкать по другому элементу кроме А нельзя? Что за мода.

У вас судя по коду в зависимости от условию выполнения условия должна быть одна кнопка либо Добавить, либо Список. А если в запросе нет параметра "action", тогда нужна только кнопка Добавить?

Если так, то

echo !$_GET["action"] || $_GET["action"]=='awards' ? '<a onclick="Awards.view(\'add\')">Добавить</a>' 
                                                   : '<a onclick="Awards.view(\'awards\')">Список</a>';

DarknesS 09.09.2016 20:45

Имеется виду при переходе по get запросу. ccылка должна заменяться простым текстом

Если $_GET["action"]=='awards' , то вместо onclick будет заменено простым текстом Список. если мы находимся на другой странице, например в t.php?action=add. то ссылка есть

echo !$_GET["action"] || $_GET["action"]=='awards' ? 'Список': '<a onclick="awards.view(\'awards\')">Список</a>';

echo $_GET["action"]=='add' ? 'Добавить' : '<a href="#" onclick="awards.view(\'add\')">Добавить</a>';


Даже при переходе на add ссылка в add также и остается кликабельной, хоть мы и перешли по ней

laimas 09.09.2016 20:55

Я ваш пользователь и могу жмахать на кнопки вашего сайта. Вопрос - нахрена мне нужен текст, который не несет никакого функционала?
Еще можно понять кнопку "Нажмите", текст которой будет изменен на "Нажато". То есть пользователь информирован о результате своего действия. А о чем говорят сообщения "Добавить" и "Список", которые "мертвы"?

Даже при переходе на add ссылка в add также и остается кликабельной, хоть мы и перешли по ней

Вы применяете тернарный оператор, а значит понимаете логику его. Я описал все ваше (в том представлении как я понимаю) одним выражением:

echo !$_GET["action"] || $_GET["action"]=='awards' ? '<a onclick="Awards.view(\'add\')">Добавить</a>'
: '<a onclick="Awards.view(\'awards\')">Список</a>';

зачем вы к нему прицепили еще и

echo $_GET["action"]=='add' ? 'Добавить' : '<a href="#" onclick="awards.view(\'add\')">Добавить</a>';

?

DarknesS 09.09.2016 21:04

пример этого, суть таже, только модуль другой, скрин сделал с одного сайта, типа того и сам хотел сделать



Пользователь перешел по ссылке "у кого больше казнеток", ссылка становится не активной и окрашивается в черный цвет, дабы было виднее сразу какая ссылка активна, другие же не активные. если пользователь перейдет по ним, также ссылка кликабельная станет тем же как и по казнеткам

laimas 09.09.2016 21:11

Цитата:

Сообщение от DarknesS
пример этого, суть таже, только модуль другой, скрин сделал с одного сайта

Ну здрасьте :) У вас по сути две кнопки, а в примере, это список ссылок, и тут все логично. Так же например делают и в меню - активный пункт его уже не ссылка.

В примере, это информация, а у вас одна из кнопок, это действие - Добавить. Хотите сказать, что просто текст Добавить, это информативно?

Может и на любителя это ваше представление кнопок, я не настаиваю, я просто не вижу в этом никакой логики.

PS. Ваша логика была бы понятна, если бы вместо ссылок были кнопки BUTTON, где неактивная была бы недоступна - disabled. Вот тогда бы было информативно. А вот текст хрен знает для чего, этого я не понимаю.

DarknesS 09.09.2016 21:23

Добавить и список это просто тестовой текст. Текст будет другим и ссылок тоже где то 10-20

Будет модуль подарков.
Простые, для мужчин, для женщин, праздничные и прочее

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

вот часть действующего кода:

".($_GET["action"]=="simple"?"Простые подарки":"<a href="#" onclick="Gifts.view(\'simple\')">Простые подарки</a>")."

laimas 09.09.2016 21:34

Ну если список из N... и как на картинке, и определяется ключом $_GET["action"] равным "simple", то что значит кнопки Добавить/Список?

Может словами описать что должно быть, что означают кнопки, их режим, и т.д.? Я теперь вообще ничего не понимаю чего надо то.

DarknesS 09.09.2016 21:39

Добавить/Список - это просто из потолка взял. текст можно любой взять:)
Не обращайте внимание на текст.

и определяется ключом $_GET["action"] равным "simple"
Вы правы, но почему то этот метод не срабатывает, пару дней бился, в итоге обратился сюда

laimas 09.09.2016 21:48

Цитата:

Сообщение от DarknesS
но почему то этот метод не срабатывает

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

Если речь о списке ссылок, которыми что-то выбирают, то по идее каждую из ссылок сервер должен как-то идентифицировать. Идентификация же, это уникальность параметров. То есть каждая ссылка должна передавать уникальный идентификатор, и если принять что он передается ключом action, то значение его должно быть уникальным идентификатором каждой из ссылок, а не текстом "simple".

Списки выводить удобнее циклом, при формировании которых указывается и их идентификатор. Остается в цикле проверять получен ли $_GET["action"] и равен ли идентификатор текущей формируемой ссылки, и если да, то вместо ссылки вывести текст.

Если у вас не это, описывайте что, догадаться что нужно никто не в состоянии.

DarknesS 09.09.2016 21:58

Написал Вам лс

warren buffet 11.09.2016 06:08

Цитата:

Сообщение от DarknesS
вот часть действующего кода:

Не кода, а говнокода.

Хз что вы с laimas изобретете, обычно такая хрень делается вот так

$action=isset($_GET["action"])?$_GET["action"]:null; // или какой-то дефолт

foreach($foo as &$bar)
   $bar='<a'.(strcmp($bar['name'],$action)==0)?(' href='.$bar['url']).'>'.$bar['title'].'</a>';

return join($foo);


То есть активная ссылка оказывается попросту БЕЗ href.

warren buffet 11.09.2016 06:12

Если это список, то вместо href с адресом - selected с "selected"

laimas 11.09.2016 07:04

warren buffet,
это для тебя, гения по гениальному коду.

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

warren buffet 11.09.2016 08:41

laimas, задолбал, вот что он хочет, точнее вещает из своего маня-мира на своем маня-языке:

Цитата:

Сообщение от DarknesS
Пользователь перешел по ссылке "у кого больше казнеток", ссылка становится не активной и окрашивается в черный цвет, дабы было виднее сразу какая ссылка активна, другие же не активные. если пользователь перейдет по ним, также ссылка кликабельная станет тем же как и по казнеткам

Если бы не картинка - так никто бы и не понял, ибо у ТС в голове каша, как и у тебя.

Ну то есть

1. ссылка становится не активной
2. дабы было виднее сразу какая ссылка активна

Потому что ламер не различает такие сущности как ссылка и адрес страницы. Ему похеру, кругом одни ссылки. Вот как правильно:

1. ссылка становится не активной
2. дабы было сразу видно по какой ссылке открыта страница

Так вот "неактивность" ссылки не имеет значения. Юзер попросту может нажать F5 и загрузить страницу еще и еще по тому же адресу.

Поэтому с href не парятся, а просто добавляют или класс вроде active, или по id разукрашивают ссылку на ТЕКУЩУЮ страницу.

Со списками соответственно вставляют selected если это список страниц и надо перемотать до опции с адресом ТЕКУЩЕЙ страницы.

Короче, учите мат-часть деревенщины.

warren buffet 11.09.2016 08:51

Например если добавить к ссылкам id, то есть к анкорам добавить id, то есть вот так href="\kaznetki" id='list_kaznetki' то можно просто сгенерить правило, например на php:

// $this->action - имя страницы, файла, в общем уникальное имя
echo '<style>#list_'.$this->action.'{color:red;}</style>';


и тогда проверки и js вообще не нужны, браузер сам все сделает.

laimas 11.09.2016 08:53

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

warren buffet 11.09.2016 08:54

Цитата:

Сообщение от laimas
автор хочет изменить под себя имеющийся у него класс

Так не под тебя, вот в чем кложа. )))

warren buffet 11.09.2016 08:55

Ну тогда может быть раскроешь секрет аннигиляции

1. ссылка становится не активной
2. дабы было виднее сразу какая ссылка активна

?


Часовой пояс GMT +3, время: 17:57.