在jsp中我有一个标签是根据数据库里的内容来显示的<span id="state" ><%if(a.getIschecked()!=1){%>未审核<%}else{%>已经审核<%}%></span>这样就是有一条数据则显示一行 审核 记录在ajax中
 document.getElementById("state").innerHTML=xmlhttp.responseText;
这条语句改变标签的内容
但是他每次只能改变第一条记录的内容 怎么样选取相应的那行的 审核 记录 改变还有一个问题就是为什么这个 按钮 点了两次后就再也不会刷新改变上面span的内容<input type="button" name="check" value="审&nbsp;核" width="20" value="1" onclick="javascript:check(<%=a.getArticleID() %>,1)"/>
<% }else{ %>
<input type="button" name="check" value="反审核" width="20" value="0" onclick="javascript:check(<%=a.getArticleID() %>,0)"/>
<%} %>

解决方案 »

  1.   

    对于 document.getElementById("state"),如果有多个id为state的控件 那么取出来的是一个数组 ,你只要知道是哪个就可以了 如: (document.getElementById("state"))[0]
    对于按钮多次点击没效果.我想你在调用这个 javascript:check(<%=a.getArticleID() %>,1) 的时候是否也把a对象的ID做过相应设置呢?
    如果没有,我想你还是设一下看看吧,具体你怎么操作的,没看到源代码,我也不敢肯定是这么回事.
      

  2.   

    1可以使用javascript的闭包特性2点击按钮触发事件时,声明个全局临时变量存储当前行的state对象的引用
    例如
    onclick="window.curState=this;触发javascript事件函数();";function ajax回调函数(){
    window.curState.innerHTML=xmlhttp.responseText;
    }
    不知道你是不是这个意思
      

  3.   

    1楼 你说的(document.getElementById("state"))[0] 没有用 alert((document.getElementById("gaga"))[1])显示的是undefine2 楼 说的 window.curState=this 这个做法没有用 google了下好象没有这样的语法 只有单独用curstate的我把主要的代码写一下吧 其实我要实现的功能很简单这是一个表格内的 每一行的显示代码
    <tr class="header">
    <td align="center" width="20%">文章标题</td>
    <td align="center" width="10%">文章ID</td>
    <td align="center" width="10%">审核标志</td>
    <td align="center" width="20%">编辑时间</td>
    <td align="center">处理</td>
    </tr>
                    <%
    for (int i = 0; i < articles.size(); i++) {
    Article a = articles.get(i);
    %><tr>
    <td class="altbg1" align="center" nowrap="nowrap"><a
    href="ArticleDetail.jsp?id=<%=a.getArticleID()%>" class="bold"><%=a.getTitle()%></a>
    </td>
    <td class="altbg2" align="center"><%=a.getArticleID()%></td>
    <td class="altbg1" align="center"><span id="gaga" ><%if(a.getIschecked()!=1){%>未审核<%}else{%>已经审核<%}%></span></td>
    <td class="altbg1" align="center"><%=a.getEditDate() %></td>
    <td class="altbg1" align="right">
    <% if(a.getIschecked()!=1){%>
    <input type="button" name="check" value="审&nbsp;核" width="20" value="1" onclick="window.curState=gaga;javascript:check(<%=a.getArticleID() %>,1)"/>
    <% }else{ %>
    <input type="button" name="check" value="反审核" width="20" value="0" onclick="window.curState=gaga;javascript:check(<%=a.getArticleID() %>,0)"/>
    <%} %>
    <a
    href="ArticleDetail.jsp?id=<%=a.getArticleID()%>">查看详细资料 </a> 
                            <a
    href="ArticleModify.jsp?id=<%=a.getArticleID()%>">编辑</a>                    <a
    target="delete" href="ArticleDelete.jsp?id=<%=a.getArticleID()%>&amp;from=<%=request.getRequestURL()%>"
    onClick="return confirm('真的要删除?')">删除</a></td>
    </tr>我想实现单击 审核按钮 或 反审核按钮 修改数据库的内容 并且将 审核标志 中的状态 异步显示出来<!--function check(id,num){//本来一句话就可以,这里啰嗦一堆都是为了解决浏览器兼容性问题.
    var xmlhttp;
    try{
        xmlhttp=new ActiveXObject('Msxml2.XMLHTTP');
    } catch(e){
                    try{
                            xmlhttp=new ActiveXObject('Microsoft.XMLHTTP');
                        } catch(e){
                                        try{
                                                xmlhttp=new XMLHttpRequest();
                                            }catch(e){}
                                }
                }
                         //这里不用刷新整个页面,就可以直接调用jsp文件了,太方便了
    xmlhttp.open("get","_check.jsp?_id="+id+"&num="+num,true);
    alert("提交了网页")
    xmlhttp.onreadystatechange=function(){
     if (xmlhttp.readyState<=4){
           
             //test.innerHTML=xmlhttp.responseText;
             document.getElementById("gaga").innerHTML="loading...";
             }
            //xmlhttp.status==404 代表 没有发现该文件
            if (xmlhttp.status==200)
            {
                //alert(xmlhttp.status);
               document.getElementById("gaga").innerHTML=xmlhttp.responseText; 
               
                //if(rrr=="ok") {alert("ok")  ;  else alert(rrr);
                //alert(rrr);
            } else 
            {
                alert("发生错误:"+xmlhttp.status);
            }}
    alert(document.getElementById("gaga"))
    xmlhttp.send(null);
    return false;
    }这里ID设为gaga 主要是避免取错元素 <%
    String _id=request.getParameter("_id");
    String _num=request.getParameter("num");
    int id = Integer.parseInt(_id);
    int num = Integer.parseInt(_num);
     System.out.println(id);
     System.out.println(num); 
     if(Article.check(id,num)){
     System.out.println("sucess");
     if(num==1){
     response.getWriter().println("审核成功");
     }else{
     response.getWriter().println("反审核成功");
     }
     }else{
     response.getWriter().println("审核失败");
     } 
     //out.write("hello");
    %>
    这个是js里调用的_check.jsp
    每个按钮 只能两次有效果 两次后则没有效果 不知道为什么 请大家帮忙改善下程序
      

  4.   

    if(id的名字.test(選擇的那個取道的數組)){----判斷是否選擇(可多選)
        xxxxxxxx
    }
      

  5.   

    不使用闭包的一种实现方法
    <span id="gaga_<%=i%>" >
    onclick="window.curState=gaga_<%=i%>;javascript:check(<%=a.getArticleID() %>,1)"window.curState.innerHTML=xmlhttp.responseText; 
    window.curState.innerHTML="loading...";javascript是一种弱类型的动态语言,对象的属性和方法都是可以极晚绑定的,不需要声明,同时javascript是基于对象的语言,在页面上定义var a和window.a是一样的所有的变量一定是某一对象的属性.
    我要睡觉了,如果还搞定的,呼吁下大家帮忙吧
      

  6.   

    感谢 sunyujia 
    修改后可以实现这个功能 但是 每个按钮 只能两次有效果 两次后则没有效果 这个问题还存在
    是不是button有问题?
      

  7.   

    得这30分真不容易啊,最后那个问题需要环境调试,通过代码我没发现什么问题.你在回调函数里面alert下,看看第三次和前两次的区别