根据所选选项更改表单元素

时间:2012-01-15 22:29:30

标签: php html forms live options

我看过几个有表格的网站,从下拉框开始,根据选择的框有不同的表单元素,例如,让我们说我想制作一个上传脚本,下拉框可能包含:

Upload
Delete

并且选择了上传我想要一个浏览文件元素,而使用删除选择时,可能只有名称应该被插入到文本字段中。我怎么能这样做?我计划使用php并使用echo语法为表单创建html,但是有一种方法可以改变基于所选选项显示的其他表单元素,例如if语句。

我见过人们使用jQuery,但我只能在我的项目中使用PHP广告HTML。

4 个答案:

答案 0 :(得分:3)

这不是一个直接的解决方案,但是如果你打算专门用php / html执行这个任务,那么你应该考虑在php文件中设置一个这样的系统来提供页面。

<?php

/*Check to see if the user has submitted the form*/
if(isset($_POST['action']))
    $action = $_POST['action'];

/*If no action has been sent from the client side, generate form*/
if(!isset($action)){ ?>
    <form name="test" action="example.php" method="POST">
        <select name="action">
            <option value="update">Update</option>
            <option value="delete">delete</option>
        </select>
    </form>
<?}

/* if update action, load file dialog*/
elseif($action == "update"){?>
    <!-- relevant HTML or action for file load -->
<?}

/*Default to delete*/
else{?>
    <!-- some action to place the input field -->
    <input name="fileName" value="<? echo $FILE_NAME; ?>" />
<?}
?>

基本上,您将不得不在一个页面中处理页面服务和表单处理,使用表单select元素中的值来确定需要加载哪些HTML块。请注意,由于没有javascript事件,您仍然需要为表单提供提交按钮以触发操作。

我想远离这个解决方案,因为我只是通过体验Dunning Kruger效应来了解它,并且我确信大多数人都不赞同缺乏客户方参与。

答案 1 :(得分:1)

我不是专家,但我想因为PHP是服务器端脚本语言,所以没有办法纯粹在php中这样做,除了重新加载页面evertime你切换下拉选项。也许你可以用框架完成它(但是谁想要使用它们?)。

答案 2 :(得分:1)

如果没有来自浏览器的某种提交来触发检查,您无法在纯服务器端代码中执行所需操作。 PHP代码在服务器上运行并将页面返回到浏览器。一旦页面离开服务器,PHP就无法做到这一点。

我已经看到在服务器端重新加载时执行此类操作的站点通常有一个初始页面,您可以在其中选择所需的操作,然后加载所选操作的表单。如果没有客户端的某种javascript,那就是你所能做的一切。

如果您可以使用javascript,那么您还有更多选择:

  1. 更改下拉框时触发表单重新加载。
  2. 更改下拉框时发送ajax请求,并将服务器返回的HTML动态添加到表单中。
  3. 发送原始页面中所有选项的字段,并使用下拉列表中的更改事件显示/隐藏相关字段。
  4. 根据您对其他答案的评论,javascript在应用程序中的作用似乎有些混乱。服务器不需要知道Javascript,甚至JQuery。服务器运行您的PHP代码以构建页面的HTML。 HTML可以引用CSS样式表,图像,Javascript文件等,就服务器而言,它们只是浏览器请求的静态文件。一旦客户端浏览器从服务器获取javascript文件,它就可以执行它并启用任何dynmiac页面行为。您的服务器端应用程序中没有Javascript代码。该应用程序只是一堆PHP文件,其中包含一组其他静态文件以支持生成的HTML。

答案 3 :(得分:0)

jQuery只是一个预先编写的javascript子集,你不允许使用javascript吗?如果你不能使用它,那么你对动态页面的能力会大大降低。

AJAX也使用javascript,是我用来加载动态内容的解决方案。你需要的例子或方法没有javascript这样做。