2 imayday51 imayday51 于 2015.06.07 19:45 提问

如何在jsp页面里获取动态生成的不同名称的radio的值?

大家好~我有个问题要求助~
我在做一个在线评分系统,在生成评分表的页面中用c标签输出了一组带有radio的分值,
代码和截图如下:
图片说明
图片说明

然后${index}是一个包含多个IndexVoValue对象的list;
IndexVoValue的部分定义如下:
public class IndexVoValue
{
private String qid;

private String question;
private String eid;
private List indexoption;
}

由于每一组的radio值都不一样,所以不能用js的document.getElementsByName("name")。。所以还能用什么办法呢?求助各位大神,拜谢~!

7个回答

showbo
showbo   Ds   Rxr 2015.06.08 10:07
已采纳

通过遍历tr获取每行里面的radio,你每行的radio的name不都是一样的

     function getRadioKV() {
        var tb = document.getElementById('你的table的id'), s = '', ipts, sel;
        for (var i = 0; i < tb.rows.length; i++) {
            ipts = tb.rows[i].getElementsByTagName('input');
            if (ipts.length == 0) continue; //表头或者没有选项的行退出
            sel = false;
            for (var j = 0; j < ipts.length; j++) {
                if (ipts[j].checked) {
                    s += '&' + ipts[j].name + '=' + ipts[j].value;
                    sel = true;
                    break;
                }
            }
            if (!sel) { //这行没有选中radio提示
                alert(tb.rows[i].cells[1].innerHTML + '没有选择!');
                ipts[0].focus();
            }
        }

        return s.substring(1);
    }
    var s = getRadioKV();
    alert(s)
imayday51
imayday51 回复showbo: 我用form提交的办法做出来了~谢谢你~!
2 年多之前 回复
showbo
showbo 回复imayday51: 第一个结构可以直接request.getParameter("radio的name")来获取,后面的那种没有办法
2 年多之前 回复
imayday51
imayday51 回复showbo: 噢噢~原来还可以不用js提交啊,那如果直接用form提交的话是不是要在后台用request.getParameter( )来获取呢,因为它是多个radio,所以要在循环中取吗?
2 年多之前 回复
showbo
showbo etElementsByTagName,byTagName,就是通过标签名称获取DOM对象,你要通过name属性值获取是用getElementsByName这个方法
2 年多之前 回复
imayday51
imayday51 回复showbo:天呐,刚开始学感觉自己啥啥都不懂。。那这一句 ipts = tb.rows[i].getElementsByTagName('input');的“input”是什么的name属性呢。。
2 年多之前 回复
showbo
showbo 回复imayday51: 如果你不要使用ajax或者js提交的话,直接表格外嵌套一个form标签就好了,然后提交form,会自动将选中的radio回传到服务器
2 年多之前 回复
showbo
showbo 回复imayday51: 给table加id,tr不需要。。var tb = document.getElementById('你的table的id')
2 年多之前 回复
imayday51
imayday51 回复showbo: 那在第一种结构中,你说“要通过遍历tr获取每行里面的radio”,是不是要给tr设置动态的id啊?然后看你代码的意思是不是把所有题被选中的radio的name和value组合成一个变量s传到后台去呢。。
2 年多之前 回复
showbo
showbo 回复imayday51: 而且你的form不要嵌套到tr里面,这种结构是错误的,有些浏览器可能会解析出问题导致你表单里面没有内容什么的
2 年多之前 回复
showbo
showbo 回复imayday51: 肯定有问题啊。。你获取不到是哪个选项的,你第一种结构就很好了
2 年多之前 回复
imayday51
imayday51 大概有点懂你的意思了。。我后来换了一种写法,在楼上,把每道题放在一个form里面,form的命名使用“一个常量+一个递增变量”的形式,然后让所有radio的name都相同。取值就在js中用form的名称取radio的value值,这样的逻辑应该没问题吧?然后取出来的值应该是一个数组,我就不知道怎么在js里面把这些值传回后台了。。麻烦你帮我看一下,谢谢~!
2 年多之前 回复
bdmh
bdmh   Ds   Rxr 2015.06.07 20:14

你最好给他们都定义一个id,这样根据id直接就能找到,否则,只能找到这一类元素,然后再判断其它特征去确定

imayday51
imayday51 我又换了一种写法,在楼下,麻烦你帮我看一下~~
2 年多之前 回复
imayday51
imayday51 给它们定义相同的id吗?我不知道该怎么找了。。其实就是想获取每一道题被选中的值,然后传回后台,求帮忙写这一段代码。。
2 年多之前 回复
songhtao
songhtao   Rxr 2015.06.07 20:19

动态id除非你能知道他的规律,否则不能确定。

imayday51
imayday51 我又换了一种写法,在楼下,麻烦亲帮我看看~
2 年多之前 回复
imayday51
imayday51 我给radio设置的name就是每一个问题的编号,是递增的,这算不算知道规律呀?应该怎么做?
2 年多之前 回复
imayday51
imayday51   2015.06.07 20:20

jsp里面的代码怎么不显示了。。重新粘一次,是这样的:


${index.qid}
${index.question}


${option.content}&nbsp&nbsp

${value.value}分 &nbsp&nbsp

/c:forEach



/c:forEach



/c:forEach

angeldwind
angeldwind `
2 年多之前 回复
angeldwind
angeldwind 插入代码要用内容
2 年多之前 回复
angeldwind
angeldwind   2015.06.07 21:37

一般获取一组数是用数组加下标来命名的如

 <input type="radio" name="list[0].id" />
  <input type="radio" name="list[1].id" />
imayday51
imayday51 听你说的之后我换了一种写法,在楼下,麻烦帮我看看~
2 年多之前 回复
cuiwei1026522829
cuiwei1026522829   Ds   Rxr 2015.06.07 22:53

看了一下,自己的理解是,选中其中一个input提交数据,但是你却无法指定某一个,我理解的对么?

我看你并没有设置id呀,我觉得还是选中编号比较好,你可以拿每条数据的编号作为id,id = “XXX”

看看行不行,

imayday51
imayday51   2015.06.08 02:29

换了一种写法,用java代码把分值取出来,并把每道题放在一个form里面,form的命名使用“一个常量+一个递增变量”的形式,然后让所有radio的name都相同。取值就在js中用form的名称取radio的value值,这样的逻辑应该没问题吧?
但是我对js不熟悉,不知道在js中怎样把取到的多个value值传到后台去,求问js里面应该怎么写~~!
图片说明
图片说明

Csdn user default icon
上传中...
上传图片
插入图片