如下:一个页面如下含有两个或更多个FORM<form id="demo1">
    <input id="aa" typeData="1">
    <input id="bb" typeData="2">
    <input id="cc">
    <select id="dd" typeData="3">
    </select>
</form><form id="demo2">
    <input id="aa" typeData="1">
    <input id="bb" typeData="2">
    <input id="cc">
    <select id="dd" typeData="3">
    </select>
</form>----------
需求说明:
为以上所有form的元素中,所有包含typeData的元素绑定blur方法。调用的函数为 fn(document.getElementById('demo'),this)..也就是参数为form对象,还有本身this; 所以,函数和form的ID是有关系的。
也就是实现这样的效果<form id="demo1">
    <input id="aa" typeData="1" onBlur="fn(document.getElementById('demo1')">
    <input id="bb" typeData="2" onBlur="fn(document.getElementById('demo1')">
    <input id="cc">
    <select id="dd" typeData="3" onBlur="fn(document.getElementById('demo1')">
    </select>
</form><form id="demo2">
    <input id="aa" typeData="1" onBlur="fn(document.getElementById('demo2')">
    <input id="bb" typeData="2" onBlur="fn(document.getElementById('demo2')">
    <input id="cc">
    <select id="dd" typeData="3" onBlur="fn(document.getElementById('demo2')">
    </select>
</form>
如何实现呢?请写成通用框架形式,因为form可能有多个,form下的元素也不只是input

解决方案 »

  1.   

        jquery 的 ajax提交 是可以用多个js来提交的 如:
           $.ajax({
    type:'GET',
    url:'${pageContext.request.contextPath}/rank/queryClothTW.do',
    dateType:'text',
    cache:true,
    success:function(text){
    // $('#div_twoWeeks').empty().append(text);
    // $('#div_twoWeeks').html(text);
    document.getElementById("div_twoWeeks").innerHTML = text;
    $('#div_twoWeeks').css('display','block');
    $('#div_weeks').css('display','none');
    $('#div_Months').css('display','none');
    }
    });
      

  2.   

    你就一个问题,获取所有,具有 typedata属性的对象 $("input[name='typeData']") 至于 form 可以用 父节点来获取  绑定onblur就是个遍历获取到得集合设置方法而已  iterm.onblur.....我想你是需要输入即验证的功能
      

  3.   


    至于 form 可以用 父节点来获取 --我觉得这样不对吧,我举的例子是这样它的父节点就是form,但是,实际项目中input可能是放在 <div> <td> 等等 中的呀。因为input可能涉及到需要其他的修饰呀。所以获取父节点不大可取啊
      

  4.   

    想个递归算法,没准可以实现。
    先把所有的form取出来,然后遍历这个数组,对每个form的标签进行递归遍历。
    这样在加onblur的时候就知道用哪个form对象了。
      

  5.   

    如果不行可以递归搞定
    fun getForm(obj){
    if (obj.nodeName!="form"){obj=obj.parentNode;}
    return obj;
    }
      

  6.   

    差不多写好了,就是在选取元素所属form id 时候遇到了问题,jquery好像也没有提供比较好的选择方案。所以做了如下改动
    <form id="demo1"> 
        <input id="aa" typeData="1" formId="demo1" value="aa"> 
        <input id="bb" typeData="2" formId="demo1" value = "bb"> 
        <input id="cc" value="cc" formId="demo1"> 
        <select id="dd" typeData="3" formId="demo1"> 
        </select> 
    </form> <form id="demo2"> 
        <input id="ff" typeData="1" value="ff" formId="demo2"> 
        <input id="gg" typeData="2" value = "gg" formId="demo2"> 
        <input id="hh" value = "hh" formId="demo2"> 
        <select id="ii" typeData="3" value="ii" formId="demo2"> 
        </select> 
    </form> 为每个元素添加了它所在form的id参数。js方法就比较简单了:
    $(function(){
    var $doms = $("[typeData]");
    for(var i =0;i<$doms.length;i++){
    $doms.eq(i) .bind("blur",function(){
    document.getElementById($(this).attr("formId"));
    });
    }
    });
      

  7.   

    没每个元素添加formId属性也可以放在
    $(function(){ }里面完成,就不用你每个元素去添ID了。
    完整代码如下:
    <script type="text/javascript">
    $(function(){
    var $forms = $("form");
    for(var i =0;i<$forms.length;i++){
    $forms.eq(i).children().attr("formId",$forms.eq(i).attr("id"));
    }
    var $doms = $("[typeData]");
    for(var i =0;i<$doms.length;i++){
    $doms.eq(i) .bind("blur",function(){
    //alert($(this).attr("formId"));
    document.getElementById($(this).attr("formId"));
    });
    }
    });
    </script>
      

  8.   

    谢谢大家的帮助:
    下面是我摸索出的代码:
    function forOnblurToElement(){
    var forms = document.getElementsByTagName("form");
    for(var i=0;i<forms.length;i++){
    var count = forms[i].elements.length;
    var formId;
    with(forms[i]){
    formId = getAttribute("id");
    $("#" +getAttribute("id")).submit(function(){
    return Validator.Validate(document.getElementById(formId),3);
    }); 
    }
    for(var j=0;j<count;j++) {
    with(forms[i].elements[j]){
    var _dataType = $(forms[i].elements[j]).attr("dataType");
    if(_dataType == null) continue; 
    $(forms[i].elements[j]).blur(function(){
    Validator.ValidateOne(document.getElementById(formId), 3, this);
    });
    }  

    }
    }在onready时候调用下这个函数即可