当使用PHP会话保留状态时,如何在刷新后触发onclick代码


how to trigger onclick code after refresh when the state is retained using PHP sessions

我使用php会话变量来保留页面状态,如下面的示例所示,这是为了维护元素已被单击并接收新类的事实。如果第二次单击该类,该类将被删除。

然而,我也设置了一个全局变量,以便我的客户端"知道"状态并执行一些影响页面其他地方其他元素的其他代码(突出显示它们)。这段代码使用被单击元素的"This"来了解如何突出显示其他元素。<====这是很重要的一点。

$("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获得它需要的类但是....其他元素都没有突出显示。这是因为listRow没有被点击,我得到这个

所以我想做的是创建一个小函数,其中包含用于突出显示其他页面元素的代码。

我有一些先决条件:所有的javascript包括全局变量都包含在外部js文件中。不允许将原始js放入标记中。也就是说,限制是我不能声明一个全局变量,然后使用php从会话变量填充它。

我认为我可以通过执行以下操作来确定项目已被php影响的事实。我说我认为,因为我不确定这是否在问问题"如果任何元素在listRow…"或者如果表达式可以以某种方式识别特定的元素。

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

我知道我可以简单地让函数在刷新时执行,就像在文档的某个地方onload:

mySelfStarter();

我要做的是找到具有类someClass的元素,然后找到id,然后使用此id设置全局变量和突出显示其他非相关元素。这些都必须是客户端代码。

类似:

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>

我不确定我遵循,但如果你保存状态在你的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"的标签,你确定你没有遗漏一个"."或"#"吗?