保存表单值取决于onclick / onchange函数

时间:2014-07-24 05:45:15

标签: javascript php html forms

我有一个表单,可以在使用php保存用户输入的值。 某些字段位于显示的div中:隐藏,直到onclick或onchange函数更改div显示。

如何在提交表单后仅显示包含已保存值的字段的div?我已将值保存在始终可见的字段中,但无法触发其功能。

我使用的是非常少的jquery,因为我对语法不熟悉,并且更愿意实现我能理解和适应的解决方案。如果它是更好/更快/更容易的解决方案,那么简单的jquery是可以接受的。

由于

代码示例:

<input type="radio" id="customer" name="jobtype" value="customer" onclick="getJobType()" autofocus>Customer
<input type="radio" id="store" name="jobtype" value="store" onclick="getJobType()">Store
<span id="customerjobs" style="display:none">
    <select id="customer" name="customer" onchange="createJobsList(this.value)">
    *various options*
    </select>

    <span id="jobslist"><br></span>
</span>

第一个范围(id = customerjobs)最初是隐藏的。从收音机中选择后,除了相应的画面之外的所有画面都设置为display:none,并且selected设置为display:block。提交时,将保存选定的电台,但不会调用onclick来显示范围。

第二个span(id = jobslist)内容由innerHTML使用在进行选择时对PHP调用ajax的结果填充。在提交时,将保存所选选项,但不会调用onchange来填充范围。

因此,我需要触发已保存的无线电值的onclick以显示我的内容并触发已保存的选择的更改以填充其他内容。

注意:我使用onblur和javascript来设置焦点,所以任何操作都会触发内容,但是在填写我不想要的表单时会造成不必要的停顿。

  1. 仅使用无线电选择加载页面。
  2. 用户点击单选按钮。
  3. Onclick函数更改span id = customerjobs的样式以显示:block。
  4. 现在可以看到范围内的选择输入。用户选择一个选项。
  5. Onchange函数进行ajax调用,以请求来自服务器的信息,该服务器位于span id = jobslist中。
  6. 用户将表​​单提交到同一页面。
  7. 表单保存输入的值,以便在页面重新加载时仍然选中它们。
  8. Onclick和onchange函数不是由PHP保存的值触发的,因此步骤3和5永远不会发生。除非再次单击,否则页面仅保留单选按钮。
  9. 好吧,我有一个jsfiddle用默认选择来说明我的问题因为我不能用PHP来保存输入的值。
    想象一下,表单刚刚提交,保存的值是选中的单选按钮(客户),下拉选项(1)添加单词“customer”。
    理想情况下,整个表单仍然可见(选定的收音机,选定的选项和添加到最后一个范围“客户”的内容)。
    相反,只有选定的收音机才可见,除非再次单击以取消隐藏选择下拉菜单。下拉保留其“值”,但最后一个跨度中的内容只会出现在更改中。

    http://jsfiddle.net/L5H2u/31/

    尝试一下并提前感谢任何建议。

1 个答案:

答案 0 :(得分:0)

你可以挂一个函数来onload来检查单选按钮并通过调用getJobtype()来模拟点击吗?这将得到最初的情况,单选按钮已经是用户想要的方式。进一步的点击将按计划进行。

编辑添加:如果我理解正确,那么第一次加载页面时一切都很好,因为用户必须单击某些内容并运行getJobType()函数。但是,当重新加载页面时,已经检查了正确的单选按钮,用户没有更改任何内容,并且您的功能无法运行。如果这是正确的,从onload运行getJobType()应该修复它。

您可能需要<input type="hidden" id="firstrun" value="true">之类的内容,PHP会在页面的后续加载中将其设置为false,而onload函数只会在&#34; firstrun&#34;是假的。编辑:你不需要这个,因为getJobType()没有默认动作;继续阅读。

编辑更多:您在“客户”单选按钮上有checked="checked',因此如果用户是客户,即使是初始运行也不会显示隐藏的材料。< / p>

在最初加载页面时删除checked="checked",以便在初始演示文稿中,都不会选中任何按钮。*然后将window.onload=getJobType;添加到JavaScript的末尾。

在初始加载时,getJobType()将不执行任何操作,因为它会检查两个按钮并且没有默认操作。单击一个按钮时,getJobType()将运行并根据单击的按钮执行操作。

当后续加载页面时,将检查其中一个按钮,当onload运行getJobType()时,它将执行相应的操作。

单选按钮,SELECT值以及保留和反映的任何其他表单元素&#34;当表单加载第二(及后续)时,服务器端PHP将是正确的。在需要onload JavaScript函数的地方,当其中一个值更改其他内容时,例如使隐藏的DIV可见。如果有getJobType()以外的函数来操作DOM,那么编写一个init函数可能会更加清晰,该函数根据PHP进程保留的表单元素的值来设置DOM。

*我通常主张默认选中某些按钮,以便用户可以始终返回初始状态。这种情况似乎是一个例外。