2012-08-08 10 views
0

我正在使用$ _SESSION在页面重定向时传回值。如何访问livequery检测到的元素的值

由于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。因此,我使用plugin 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(); 
}); 

当在萤火虫审查我注意到,在livequery发现添加元素没有html显示。 DOM准备好了,否则livequery不能运行,但是这就是为什么没有找到价值的原因?

感谢任何指导。

+0

如果定期重定向并使用PHP输出HTML,那么为什么您需要livequery? – adeneo 2012-08-08 06:35:59

+0

* neater *这样做的方法是使用[cookies](http://www.satya-weblog.com/2007/05/php-and-javascript-cookie.html) – JCOC611 2012-08-08 06:37:56

+0

Hi @adeneo我想要控制该页面通过重用用于创建原始页面的脚本来动态地通过jquery脚本。 PHP只是将值输出到Jquery可以看到的地方。有没有另外一种方法呢? – codepuppy 2012-08-08 06:51:00

回答

1

不要使用此:

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

执行下列操作(在大多数情况下,为输入)得到一个值:

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

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

对于div案件,没有value,但你可以从里面得到htmltext的值:

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

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

只是为了知道...

你可以混用PHP和jQuery,但看看我的从这篇文章回答更好的理解:

Is echoing Javascript code condtionally based on server-side logic considered harmful?

+0

Hi @Ocsar我以前试图在通过属性获取值之前尝试使用$(this).html()和$(this).text()。我刚刚尝试过这一点,但它不起作用。我不知道如何获得价值的不同方法。 – codepuppy 2012-08-08 06:45:31

+0

嗨@Oscar omg现在是如此明显!我花了太长时间看这个!迷惑自己。好的,当然,显然的遗漏是,我已经设法取出代码来填充div的值!因此.html()和.text()找不到任何东西!我多愚蠢!好的,我已经排序了一点。现在我要用Jquery来看一个混合PHP。这似乎与直觉相反,但可能非常有用。 Thx – codepuppy 2012-08-08 07:06:42

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()),并在页面加载查看它是否存在(有长度),并获得价值。

+0

嗨@adeneo好的我之前没有使用过implode,所以我会去阅读它。如果我理解正确,可以在jquery脚本中使用原生javascript onpageload在整个页面加载后检查元素是否具有长度。而不是使用livequery捕获从.ready开始添加元素。我确实尝试从.ready开始检测长度,但它没有长度,因此我的搜索结果与livequery相同。您担心我会使用livequery来检测div的添加。这是因为它在某种程度上不好?或者没有必要? Thx – codepuppy 2012-08-08 07:24:05

+0

如果元素不是动态的,即,如果稍后未添加ajax,而是在页面发送到浏览器之前在服务器端添加了PHP,则不需要插件,所有您必须执行的操作检查元素是否存在。在浏览器中查看源代码是否实际添加到DOM。同样,echo不会显示数组,你需要一个字符串。 – adeneo 2012-08-08 09:14:30