这个可能不是很好说明,我尽量用易懂的语言来表述。
首先表单form1里有个元素是用ajax加载进来的,所以不一定存在。
例如下面这个例子,要求如下:1.打开页面后,客户要求宽(width)和高(hight)是必选的,所以2个input框打开页面即存在2.颜色(color)非必选,当用户触发某一事件时,加载进div的id="color"的位置,不具体叙述。3.要求点击提交的按钮(其实是将一个图片做成了按钮的样子,并非button元素)时,页面不刷新代码如下<form name="form1" type="text" ><div color="color"><input name="color"  type="text" ></div><input name="hight"  type="text" >
<input name="width" >
<img src="images/像提交按钮的一个图片.png" onclick="startRequest('提交','提交.php?width='+document.form1.width.value+'&hight='+document.form1.hight.value+'&color='+document.form1.color.value+');">
<div id="提交">提交成功后,提交.php返回的内容在这里输出</div></form> 看明白了么?那个提交按钮就是一个image,onclick后调用了一个万用ajax.js文件。实现页面不刷新提交。最后阐述一下问题,图片的onclick事件被触发后,用javascript调用了3次,取得input框的值(width、higth、color),如果说<input name="color">这个元素被加载进页面,则程序执行正常;如果说<input name="color">这个元素没有被加载进页面,则点击image时,屏幕左下角会出现一个小叹号提示脚本错误(消息: 'document.form1.color.value' 为空或不是对象)请问怎样才能在没有color输入框的时候,image的onclick事件触发时使网页不报错,并且使document.form1.color.value获取的值为0,或者为空呢?

解决方案 »

  1.   

    ........不会写??那你的startRequest是怎么来的?<img src="images/像提交按钮的一个图片.png" onclick="startRequest('提交','提交.php?width='+getVal('width')+'&hight='+getVal('height')+'&color='+getVal('color')+'');">
    <script>
    function getVal(a){
        if(document.getElementsByName(a)[0]){//仅适用于文本框是以name命名的
            return document.getElementsByName(a)[0].value;
        }
        return "";
    }
    </script>
      

  2.   

    这样吧。把document.form1.color.value
    改为:(document.form1.color==null?"":document.form1.color.value)这样不就解决了。
      

  3.   

    startRequest 那段是我从珍藏好久一个网页中拷贝出来的^-^看明白了,谢谢你。
    我试试。
      

  4.   

    alert(document.getElementsByName(width).value);用document.getElementsByName取值,取到了“undefined”的值。
      

  5.   

    alert(document.getElementsByName('width')[0].value);让你照着来,你都会搞错。去看看javascript基础再说吧
      

  6.   

    小朋友,你JS完全无了解啊。
    这个是你没写引号的原因:
    alert(document.getElementsByName('width').value);开头问的问题,如果可能存在的控件名称是可预知的,用那种判断是否目标存在的方法也算方便。
    但如果你压根不知道AJAX可能返回什么内容,就不能那样做了,就得遍历FORM的INPUT子对象,取每一个子对象的NAME和VALUE拼成参数串。
      

  7.   


    alert(document.getElementsByName('width')[0].value);果然取到了值。
    可是调用时又出了毛病,网页中加了个这个:
    <script>
    function getVal(a){
        if(document.getElementsByName(a)[0]){//仅适用于文本框是以name命名的
            return document.getElementsByName(a)[0].value;
        }
        return "";
    }
    </script>
    调用时写alert(getVal('width'));  或者写alert(getVal(width));都不对。调用时应该怎么写呢?
      

  8.   

    按照4楼的改下就好了<img src="images/像提交按钮的一个图片.png"
    onclick="startRequest('提交','提交.php?width='+document.form1.width.value+'&hight='+document.form1.hight.value+(document.form1.color?'&color='+document.form1.color.value:''));">
      

  9.   


    其实这个例子很复杂,为了便于说明,所以假设只有width、hight、color这3个对象,实际上....大概有20个。如果按照4楼的写,那个startRequest会很长很长#-_-,像我这样的javascript白痴,容易搞错符号。所以相对来说3楼的比较简洁。现在的问题是按照3楼的意见,那个onclick="startRequest..."里怎么来调用呢?
      

  10.   


    <img src="images/像提交按钮的一个图片.png" onclick="startRequest('提交','提交.php?width='+getVal('width')+'&hight='+getVal('height')+'&color='+getVal('color')+'');">调用我在#3楼都写得清清楚楚,你搞不明白就拿4楼的吧
      

  11.   

    <img src="images/像提交按钮的一个图片.png" onclick="startRequest('提交',getParams());">
    <script type="text/javascript">
    function getParams(){
        var params="提交.php?width="+getVal('width');
        params+='&height='+getVal('height');
        params+='&color='+getVal('color');
        //还有就继续加
        return params;
    }
    function getVal(a){
        var o=document.getElementsByName(a)[0];
        return o?o.value:"";
    }
    </script>
      

  12.   


    一直报错误:提示缺少对象,我把我真正的代码贴出来
    (startRequest里实际是3个参数startRequest(div_id,yugou.php,最后拼接的一个字符)),
    纠结了好久。
    以下为dreamweaver 中直接贴出来的代码:
    <div id="add_buttion"><img src="images/men_add.png"  onclick="alert(getVal('tel'));startRequest('yugou','yugou.php?tel='+document.form1.tel.value+'&id=','1');"></div>

    <script>
    function getVal(a){
        if(document.getElementsByName(a)[0]){//仅适用于文本框是以name命名的
            return document.getElementsByName(a)[0].value;
        }
        return "";
    }
    </script>
      

  13.   


    按照新的脚本,也是提示缺少对象
    以下是dreamweaver中贴出来的源码:
    <div id="add_buttion"><img src="images/men_add.png"  onclick="startRequest('yugou',getParams(),'');"></div>

    <script type="text/javascript">
    function getParams(){
        var params="yugou.php?tel="+getVal('tel');
        params+='&stuff='+getVal('stuff');
        //还有就继续加
        return params;
    }
    function getVal(a){
        var o=document.getElementsByName(a)[0];
        return o?o.value:"";
    }
    </script>
    <div id="yugou"></div>
      

  14.   

    crying_boy太感谢你了。最后一个例子非常好用,后来我将<script type="text/javascript">这段放到head里,就可以正常执行了。也取到了值。
      

  15.   

    纠结了2天的问题,终于解决了,并且用最后一个例子,代码变得非常简洁也易于维护。
    现在心里无比畅快!
    crying_boy我想请你吃饭。
      

  16.   

    还是CSDN的人好,我在百度知道里提问,回答的都不靠谱。
    谢谢大家!
      

  17.   

    我觉得这个getParams想法很不错,但是对于20个或者更多都手动写还是有点麻烦 function getParams(orders) {
      var params = "yugou.php?";
      var inputs = form1.getElementsByTagName("input");
      var len = inputs.length;
      if(arguments.length == 0) {
      for(var i = 0; i != len; ++i) {
    var input = inputs[i];
    params += (i == 0 ? '' : '&') + input.name + '=' + getVal(input.name);
      }
      }
      if(arguments.length == 1) {
      for(var i = 0; i != len; ++i) {
    var order = orders[i];
    params += (i == 0 ? '' : '&') + order + '=' + getVal(order);
      }
      }
      return params;
    }
    }
    如果想按给定顺序输出就通过数组传顺序参数,默认按dom树中的顺序输出
      

  18.   


    呵呵,考虑得不周全。radio和checkbox咋办捏??