jQuery MiniUI

 找回密码
 立即注册
查看: 5335|回复: 7
打印 上一主题 下一主题

获取类似表格 显示的Form 控件数据 [复制链接]

Rank: 3Rank: 3

跳转到指定楼层
楼主
发表于 2013-10-10 15:39:17 |只看该作者 |倒序浏览
版主:下午好!

有个比较急的重点问题,请教下:

如图:



我用一个Panel显示了上面的“第1部分 :单选题”一个题型,panel的Body中为一个动态拼接的表格,用于显示各个题目。

现想通过form来取得这个panel(可转化为表单)表单中的ChangeData,然后,传回后台处理。

但执行下面后,
function getChangeData() {
            var form = new mini.Form("#panel1");
            form.validate();
            if (form.isValid() == false) return;

            var data = form.getChanges();
            var json = mini.encode(data);
            
            mini.alert(json);
        }

取不到更改的资料,原因可能是我的每个单选按钮组或其它Textarea的NAME都设置为一样的了。因为,这已经像一个datagrid一样,在显示表中多行数据了。

列名一样,只是有多行显示出,现在,就是想通过Form表单取得这一些控件变化后的值。

另外我知道,如果要做更新操作,这里面是要放入数据ID的,这个我后面会加入。

下面是此页面附件,麻烦有空后看看,先谢谢了!





附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册

Rank: 3Rank: 3

沙发
发表于 2013-10-10 16:03:09 |只看该作者
这个时候,如果去获取表单数据 :

var data =form.getData();
            var json = mini.encode(data);
            
            mini.alert(json);

它只会显示最后一个控件的值了。

要是能和DataGrid一样,就比较好办。

Rank: 8Rank: 8

板凳
发表于 2013-10-10 16:54:25 |只看该作者
netui 发表于 2013-10-10 16:03
这个时候,如果去获取表单数据 :

var data =form.getData();

form跟表格不同,是没有getChanges()的,form的一般是获取整个表单值,然后一齐提交

Rank: 3Rank: 3

地板
发表于 2013-10-10 16:58:25 |只看该作者
factory 发表于 2013-10-10 16:54
form跟表格不同,是没有getChanges()的,form的一般是获取整个表单值,然后一齐提交 ...

哦, 那还有其它比较好的办法吗?

一个试卷界面中,有很多题目,每个题目的作答都是用一个控件来获取数据的。

所以,现在,卡在这里不好弄了。

那如果,这样做,看行不行。

定时,遍历整体的Form中的各个控件值,看看有没有Changes的,如果,有就生成json数据,传回到后台处理了。

不然,我也没有其它好的办法。

Rank: 8Rank: 8

5#
发表于 2013-10-10 17:02:40 |只看该作者
本帖最后由 factory 于 2013-10-10 17:05 编辑
netui 发表于 2013-10-10 16:58
哦, 那还有其它比较好的办法吗?

一个试卷界面中,有很多题目,每个题目的作答都是用一个控件来获取数 ...

我们form的定位一般处理普通那种人员啊之类的信息的表单,所以是把整个表单的值都给提交过去.

你可以试下这个方法,不过对于你有点麻烦
就是给每个radiobuttonlist绑定onvaluechanged事件,只要触发的,就把该个radiobuttonlist的id或者name,反正唯一标识符和他的值,组成一个对象,放到一个数组里,然后提交的时候,就提交这个数组
,当然还需要处理对于数组中已经存在的,进行修改的情况.
或者把唯一标识符合值,分别作为对象的字段和值,这样判断是否存在,然后进行值的修改的时候,不需要像数组那样遍历
直接obj.xxx = newYYY了

Rank: 3Rank: 3

6#
发表于 2013-10-10 17:18:27 |只看该作者
factory 发表于 2013-10-10 17:02
我们form的定位一般处理普通那种人员啊之类的信息的表单,所以是把整个表单的值都给提交过去.

你可以试下 ...

嗯,我明白你说的意思了,

在各个控件值Change时,把change后的值及题目ID,写入一个全局中间数组对象中。

最后定时提交或用户提交时,再提交此数组数据。

的确,这样算是比较好的解决方案,其实这个也就类似于,表格或Form的getChanges方法了,只是要自己封装。

先感谢了,我晚上回去,去尝试一下,如有问题,还需麻烦下你们了。

Rank: 8Rank: 8

7#
发表于 2013-10-10 17:29:20 |只看该作者
netui 发表于 2013-10-10 17:18
嗯,我明白你说的意思了,

在各个控件值Change时,把change后的值及题目ID,写入一个全局中间数组对象中 ...

你可以试试这样,不要放到数组,放到一个对象中
var obj = {
    题目1:"1",
    题目2:"2"
}

以后修改也方便,只要  obj.题目几 = newValue  就好了,不需要去遍历数组,找到对象,再修改对象的值

Rank: 3Rank: 3

8#
发表于 2013-10-11 09:30:01 |只看该作者
本帖最后由 netui 于 2013-10-11 09:31 编辑
factory 发表于 2013-10-10 17:29
你可以试试这样,不要放到数组,放到一个对象中
var obj = {
    题目1:"1",

function test () {
            var data={};
            data.tm1={ID:1,KSDA:"A",FLAG:"Y",FLAG_BZ:"123"};
            data.tm2={ID:2,KSDA:"B",FLAG:"Y",FLAG_BZ:"12344"};
            data.tm3={ID:3,KSDA:"C",FLAG:"Y",FLAG_BZ:"5t23sd"};
            data.tm4={ID:4,KSDA:"D",FLAG:"N",FLAG_BZ:"ffff"};
            mini.alert(data.tm1.KSDA);
            mini.alert(mini.encode(data));
        }

最后用mini.encode(data)方法可以转为标准json数据:

{"tm1":{"ID":1,"KSDA":"A","FLAG":"Y","FLAG_BZ":"123"},"tm2":{"ID":2,"KSDA":"B","FLAG":"Y","FLAG_BZ":"12344"},"tm3":{"ID":3,"KSDA":"C","FLAG":"Y","FLAG_BZ":"5t23sd"},"tm4":{"ID":4,"KSDA":"D","FLAG":"N","FLAG_BZ":"ffff"}}

嗯,感谢,用对象方法,省去了遍历数组对象取设置问题。而且,还可以使用Mini中的对象转json方法,传回后台。

真心感谢Factory了!我先去尝试做一下。

Archiver|普加软件

GMT+8, 2024-11-25 07:26 , Processed in 1.062781 second(s), 11 queries .

Powered by Discuz! X2

© 2001-2011 Comsenz Inc.

回顶部