使用javascript的多页面

时间:2014-01-04 06:39:28

标签: javascript php ajax forms

我接手了一个项目,我正在尝试纠正现有的代码。由于机密性,我无法显示代码,但我会尝试尽可能详细地提出我的问题,如果绝对必要,我会尝试显示我认为我正在使用的代码。

现在这个表单使用了一堆js文件。表单本身使用javascript和ajax在需要时调用php文件。这使形式成为多重的幻觉,但事实上它只是一个。因此,第一个“页面”包含要填写的字段,当用户单击下一个时,它会将该“页面”替换为下一个“页面”,依此类推。在一个页面上是一个复选框列表,选中一个复选框将变量设置为该值。然后在表单中调用并显示它。

因此,通过表单“页面”有下一个并返回按钮,使用javascript简单地将当前“页面”替换为下一个“页面”,但因为从技术上讲,所有相同页面的所有表单字段都是保持填写,直到最后一个'页面'进入数据库。

因此,如果用户选中其中一个复选框并转到显示该值的页面,则单击返回复选框页面并选择其他页面,当他们返回表单时,显示的上一个复选框值不是改变的新价值。如何让它更改为新值。其他所有工作,如果更改复选框并将表单保存到数据库,则将保存更改,但它不会显示更改中的正确数据。

有几个地方我需要更改,但我不想丢失所有字段中的数据,只是当用户更改某些内容时,它会在表单中的任何位置发生变化。

如果需要代码,我可以发布简单的行,但我不能提供完整的代码。

感谢。

[UPDATE]

    //The below code is in the form data javascript file.
    //validate//
    var field  = findField(page, 'data');
         //Above is setting the data for the field Below is getting the checkbox value from the previous 'page'.
    var checks = findField(form.check[0], 'check').value.split(/\s*\,\s*/);
    for (var i in checks) {
    var checkbox_id = checks[i];
    var check    = checkdata('check')[checkbox_id];
    //Removed project detail
    info += '<p>For ' + check.name + ' displayed:</p>';

好的,上面是它显示的位置。我已经将问题缩小到后面的按钮上没有清除显示的内容。因此,check.name将一直显示,直到强制显示的字段发生更改,然后check.name将更改为正确的值。因此,当“页面”循环播放时,是否有javascript我可以用来在用户单击后退按钮时清除该字段。难道这么简单吗?我希望上面的代码有点帮助。

3 个答案:

答案 0 :(得分:0)

没有代码,我们只能猜测,但这里有一些可能的猜测:

如果正在保存先前表单元素中的DOM元素(没有被销毁,然后当有人转到下一个表单然后再返回时重新创建),那么DOM元素将保留其先前的值,除非您的某些代码是改变这些价值观。因此,如果正在保留DOM元素并且复选框的值正在发生变化,那么它必须是因为您的某些代码正在更改它们。最可能的猜测是,有些代码试图在完成任何编辑之前将复选框初始化为初始值。如果是这种情况,那么您需要确保在显示已经向用户显示并进行编辑的页面时不运行此代码。

如果DOM元素在从表单导航到表单时被销毁并重新创建,那么这些复选框的当前值需要保存在某个地方的javascript变量中,这样当用户导航回到先前的表单时,可以创建复选框并且不是从数据库中初始化,而是从之前编辑的值中初始化。

答案 1 :(得分:0)

将所有数据保存到某个阵列/对象。当您返回某个页面时,请填写所选复选框,然后将所有这些复选框的状态重置为默认值,当用户提交该部分表单时,它将再次分配它们。

答案 2 :(得分:0)

我修好了。

我所做的是去了输出的地方,并将存储它的代码带到变量。由于这是一个文件,当用户点击“返回”时,仍然会设置变量。因此,当用户返回更改前面的字段时,我会输入代码来检查变量是否为空。如果不是它什么都没有,如果不是那么它会将变量设置为空,所以它将在稍后的代码中再次设置更新的数据。

轻松的Peasy。我不明白这种困惑。

非常感谢。