2013-01-10 53 views
0

基于酷的StackOverflow代码,我成功地创建了一系列动态加载的<SELECT>下拉列表。但是,在处理表单时(例如,如果提交的信息有错误),我需要在动态加载的<SELECT>块中自动选择合适的<OPTION>。我尝试了一个可以与静态<SELECT>块一起使用的解决方案,但它在我的动态加载块上不起作用。 (我隐藏/显示在需要的时候<SELECT>块。)下面的代码:通过JQuery自动选择<option>动态加载<select>

<?php do things at the beginning of the page ?> 
<script> 
$(function() { 
    $('#container_A1').hide(); 
    $"#category_A0").change(function() { 
     $("#category_A1").load("http://domain.com/loader/"+$("#category_A0").val()); 
     $("#container_A1").show(); 
    }); 
}); 
</script> 

<?php create the HTML page... ?> 

<script><?php 

if(isset($_POST['category_A0']) && $_POST['category_A0'] != '' && 
    isset($_POST['category_A1']) && $_POST['category_A1'] != ''){ ?> 

$(function() { 
    $("#category_A1").load("http://domain.com/loader/"+$("#category_A0").val()); 
    $("#container_A1").show(); 
    $("#category_A1").val("<?php echo $_POST['category_A1']; ?>"); // NOT WORKING 
}); 
<?php 
} 
?> 
</script> 

一切正常,只是试图将category_A1 <SELECT>块的值设置为定义的选项的最后JQuery的行$ _ POST [ 'category_A1']。这是行不通的。当调用后续的.val()函数时,.load()函数是否未完成?

谢谢!

+3

您通常不应混合使用服务器端和客户端代码。它很可能不会像你想象的那样工作(即PHP必须在JavaScript开始之前完成它所做的一切)。 –

+0

我很困惑。为什么我看到php代码?我可能想看到的唯一的php就是在'/ domain.com/loader /'中。这是上面给出的吗? –

+0

Brian Hoover的见解非常完美。大多数PHP代码都是不必要的,但有些是必需的......比如在运行之前构建JQuery脚本所需的$ _POST数据。在.load()回调中嵌入最终的.val()效果非常好。遗憾的是,我不得不等待8个小时才能发布一个实例。 –

回答

0

.load是一个异步函数。在.load运行时,jQuery将继续运行,因此第二个$("#category_A1").val("<?php echo $_POST['category_A1']; ?>");将始终被$("#category_A1").load("http://domain.com/loader/"+$("#category_A0").val());的结果覆盖。

+0

我怀疑是这样。我如何使动作同步? .load()函数完成之前是否可以暂停执行.val()函数?类似于Javascript的OnLoad触发器? –

+1

.load规范中有一个完整的回调函数,可能会完成要查找的内容http://api.jquery.com/load/您可以在回调中设置值。 –