0

我正在使用 $_SESSION 在页面重定向的情况下传回一个值。

由于 jquery 无法访问 $_SESSION 我决定使用 PHP 将值输出到隐藏的 div 并在获取值后删除该 div。我希望有一种更简洁的方法可以做到这一点,但我不知道如何将 $_SESSION 变量公开给 jquery。

<?php       
    $pass_Back = $session->get_Pass_Back();
    $session->clear_Pass_Back();
?>

<?php
    if (count($pass_Back) != 0){
        echo "<input class=\"field_Input_Left\" id=\"schedule_Description\" type=\"text\" name=\"schedule_Description\" value=\"" . array_shift($pass_Back) . "\"/><br />";
        echo "<div id=\"pass_Back\" style=\"visibilty: hidden;\" ></div>";
    } else {    
        echo "<input class=\"field_Input_Left\" id=\"schedule_Description\" type=\"text\" name=\"schedule_Description\"/><br />";
    }
?>

一旦完成,我需要一个方法让 jquery 知道这个新元素是否以及何时添加到 DOM。因此,我使用插件 livequery 来匹配添加元素的时间。它这样做很棒。

但是当我尝试访问 div 中的值时,它表明它是未定义的。

$("#pass_Back").livequery(function(){
    if ($("#class_Name").val() != 0){
        var class_Name = $("#class_Name").val();
        get_Schedule_Data(class_Name);
    } else {
        var class_Name = "ALL";
        get_Schedule_Data(class_Name);
    }   


    $value = $(this).attr("value");
    auto_Fill_Schedule($("#pass_Back").attr("value"));

    // destroy pass back

    $("#pass_Back").remove();
});

在 firebug 中查看时,我注意到在 livequery 找到添加的元素时没有显示 html。DOM 已准备就绪,否则 livequery 无法运行,但这就是找不到值的原因吗?

任何指导都感激不尽。

4

2 回答 2

1

不要使用这个:

$value = $(this).attr("value");

执行以下操作以获取值(在大多数情况下用于输入):

(假设$(this)是您的输入)

$value = $(this).val();

对于div情况,没有value,但您可以从内部获取htmlortext作为值:

(假设$(this)是你的 div)

$value = $(this).html();
//or:
$value = $(this).text();

想知道...

您可以将 PHP 与 jQuery 混合使用,但请查看我在这篇文章中的回答以便更好地理解:

基于服务器端逻辑的有条件地回显 Javascript 代码是否被认为是有害的?

于 2012-08-08T06:35:13.713 回答
1

只要您不输出整个 $_SESSION 数组或任何重要的东西,您就可以了:

<?php       
    $pass_Back = $session->get_Pass_Back();
    $session->clear_Pass_Back();

    if (count($pass_Back) != 0){
        echo '<div id="passBack" type="text" value="'.implode(",", array_shift($pass_Back)).'" />';
    }
 ?>

JS

 $(function() {
     if ($("#passBack").length) {
         //element exists in DOM, get the value
         var passBack_data = this.value;
         //do something with the value
     }
 });

只需输出元素并确保它是一个字符串,而不是一个数组(我使用过implode()),然后在页面加载时查看它是否存在(有长度),然后获取值。

于 2012-08-08T06:43:17.483 回答