【发布时间】:2016-02-18 22:17:45
【问题描述】:
我正在编写一个处理脚本,它允许用户在表单的隔间中输入数据并保存每个部分,而不是一次性完成整个页面。它本质上是页面内可扩展元素内的一系列表单。但是,在向自身提交任何表单后,页面无法重新加载任何 javascript,在 jquery mobile 的文档中确实说这可能会出现问题,但我无法使那里提供的任何解决方案都能正常工作。
我已将我的代码精简为一个非常基本的框架以进行故障排除:
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="stylesheet" href="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.css">
<script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
<script src="http://code.jquery.com/mobile/1.4.5/jquery.mobile-1.4.5.min.js"></script>
</head>
<body onload = myFunction("<?php echo $_GET['p']?>")>
<script>
function myFunction(tab)
{
$('#content_'+tab).collapsible('expand');
}
</script>
<div data-role="collapsibleset" class="ui-content">
<div id = "content_1" data-role="collapsible">
<h1>Click me - I'm collapsible!</h1>
<form action = "<?php echo $_SERVER['PHP_SELF'] . "?p=1"?>" method="GET">
<div><input type="submit" id="Button1" name="" value="Save"></div>
</form>
</div>
<div id = "content_2" data-role="collapsible">
<h1>Click me - I'm collapsible!</h1>
<p>I'm the expanded content.</p>
</div>
<div id = "content_3" data-role="collapsible">
<h1>Click me - I'm collapsible!</h1>
<p>I'm the expanded content.</p>
</div>
<div id = "content_4" data-role="collapsible">
<h1>Click me - I'm collapsible!</h1>
<p>I'm the expanded content.</p>
</div>
<div id = "content_5" data-role="collapsible">
<h1>Click me - I'm collapsible!</h1>
<p>I'm the expanded content.</p>
</div>
</div>
</body>
</html>
代码试图完成一个简单的任务。提交表单后,将其发送给自身,其中一些 php 脚本将处理结果,然后页面会将更新加载到表单字段中。这一切都很完美,没有做它应该做的部分是 myFunction 进程,它应该将活动的可扩展内容设置为 content_ 的值(任何数字在 $_GET['p'] 中)。
我认为将它放在正文中会强制其在页面加载时更新,但 jquery mobile 的行为不同。
我也尝试过将 js 在单独的 .js 文件中加载到标题中,但无济于事。
我什至尝试将所有 java 脚本包含在一个 div 元素中,并在所有可扩展内容元素周围使用该包装器,因为 jQuery 文档说(我认为)只加载了 div 元素。
提交表单时,它会被处理,但不会自动扩展任何内容。如果您手动刷新页面,它会按原样展开,但您不需要在单击保存后手动刷新页面。
我也尝试过使用
<script>
$( document ).on( "pagecreate", function( event ) {
var tab = <?php echo $_GET['p'];?>;
alert(tab);
$('#content_'+tab).collapsible('expand');
});
</script>
上面的内容将回显 p 的正确值,但不会为任何内容分配扩展。我尝试在可展开的 div 元素之前和之后包含它。
我没有办法尝试让它加载,是我遗漏了一些简单的东西,还是有一个我还没有遇到过的替代方法?
【问题讨论】:
-
能否请您创建一个jsfiddle 的问题?
-
我不能,它不允许我输入任何发送数据的 php 代码。即使省略了 php,由于某种原因,它也不会加载 jquery mobile。我以前从未使用过 jsfiddle,但我可能做错了......