我正在使用 $_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 已准备就绪,否则实时查询无法运行,但这就是找不到值的原因吗?
任何指导都感激地收到。
不要使用这个:
$value = $(this).attr("value");
执行以下操作以获取值(在大多数情况下用于输入):
(假设$(this)
是你的输入)
$value = $(this).val();
对于div
情况,没有value
,但您可以从内部获取html
或text
作为值:
(假设$(this)
是你的div)
$value = $(this).html();
//or:
$value = $(this).text();
只是要知道...
您可以将PHP与jQuery混合使用,但请查看我从这篇文章中的答案,以便更好地理解:
基于服务器端逻辑的回显Javascript代码被认为是有害的吗?
只要你不输出整个 $_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()
),然后在页面加载时查看它是否存在(有长度),并获取值。