как вызвать код onclick после обновления, когда состояние сохраняется с помощью сеансов PHP - PullRequest
0 голосов
/ 22 сентября 2011

Я использую переменные сеанса php для сохранения состояния страницы, как в приведенном ниже примере, чтобы сохранить тот факт, что элемент был выбран и получил новый класс. Класс удаляется позже, если щелкнуть по нему второй раз.

Однако я также устанавливаю глобальную переменную так, чтобы моя клиентская сторона «знала» состояние и выполняла какой-то другой код, который влияет на другие элементы на странице в другом месте (выделяет их). Этот код использует «this» элемента, по которому щелкнули, чтобы узнать, как выделить другие элементы. <==== это важный бит. </p>

$("listRow").click(function(){

    if (globalVariable == "someClass")
    {
        // clean global
        globalVariable = " ";

    /* call a server side script via ajax to unset php session variable */

    }else{ 

    /* call a server side script via ajax to create a php session variable, later used on page refresh to retain page state*/
        // also set a global js variable for use elsewhere
        globalVariable = "someClass";

};

$(this).toggleClass(".someClass");

// alot of code to do something to other elements on the page using some data that is specifically available in this element

});

Теперь представьте себе нормальный сценарий:

  • Пользователь нажимает список строк, вызывающих код. // пока все хорошо

  • Пользователь обновляет страницу: listRow получает необходимый ему класс, НО .... ни один из других элементов не будет выделен. Это происходит потому, что listRow не был нажат, и я получаю это.

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

У меня есть ряд предварительных условий: весь javascript, включая глобальные переменные, содержится во внешних js-файлах. Не допускается помещать сырые js в разметку. то есть ограничение заключается в том, что я не могу объявить глобальную переменную в, а затем использовать php для ее заполнения из переменной сеанса.

Я думаю, что могу определить тот факт, что предмет был затронут php, выполнив следующие действия. Я говорю, что думаю, потому что я не уверен, задает ли это вопрос "если какой-либо элемент в listRow ..." или выражение может каким-то образом идентифицировать конкретный элемент.

function mySelfStarter()
{

if ($("listRow").hasClass("someClass"))
{
      // some code
};
};

Я знаю, что могу просто заставить функцию выполняться при обновлении, например, где-то в документе onload:

mySelfStarter();

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

Что-то вроде:

if ($("listRow").hasClass("someClass"))
{
// find the element that has the class "someclass"
// get the id of this element
// do something with id
     };

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

<div id="listWrapper" class="wrapper">
    <div id="value1"      class="listRow"></div>
    <div id="value2"      class="listRow"></div>
    <div id="value3"      class="listRow"></div>
    <div id="value4"      class="listRow"></div>
</div>

после нажатия

<div id="listWrapper" class="wrapper">
    <div id="value1"      class="listRow"></div>
    <div id="value2"      class="listRow someClass"></div>
    <div id="value3"      class="listRow"></div>
    <div id="value4"      class="listRow"></div>
</div>

после обновления страницы

<div id="listWrapper" class="wrapper">
    <div id="value1"      class="listRow"></div>
    <div id="value2"      class="listRow someClass"></div>
    <div id="value3"      class="listRow"></div>
    <div id="value4"      class="listRow"></div>
</div>

1 Ответ

0 голосов
/ 22 сентября 2011

Я не уверен, что следую, но если вы сохраняете состояние в своем сеансе php, вы можете проверить это перед рендерингом страницы, и если в сеансе говорится, что элемент был нажат, то также визуализируется небольшой скрипт js это вызовет событие щелчка на вашем элементе. Таким образом, вы получаете все необходимые побочные эффекты, как если бы пользователь щелкнул элемент.

Вы можете вызвать событие щелчка, выполнив что-то вроде:

 $("#element").trigger("click");

Редактировать с окончательным решением

Как насчет этого:

 $("listRow.someClass").each(function(){ 
    // - this: Is the element with the class 
    // - $(this).attr("id"): Is the ID of that element
    // do something with id 
  }); 

Как насчет сейчас? Кстати, выполнение $ ("listRow"), вероятно, ничего не найдет, так как вы говорите JQuery искать тег с именем listRow, вы уверены, что не пропустили "." или "#" там?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...