这个可能不是很好说明,我尽量用易懂的语言来表述。
首先表单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,或者为空呢?
首先表单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,或者为空呢?
<script>
function getVal(a){
if(document.getElementsByName(a)[0]){//仅适用于文本框是以name命名的
return document.getElementsByName(a)[0].value;
}
return "";
}
</script>
改为:(document.form1.color==null?"":document.form1.color.value)这样不就解决了。
我试试。
这个是你没写引号的原因:
alert(document.getElementsByName('width').value);开头问的问题,如果可能存在的控件名称是可预知的,用那种判断是否目标存在的方法也算方便。
但如果你压根不知道AJAX可能返回什么内容,就不能那样做了,就得遍历FORM的INPUT子对象,取每一个子对象的NAME和VALUE拼成参数串。
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));都不对。调用时应该怎么写呢?
onclick="startRequest('提交','提交.php?width='+document.form1.width.value+'&hight='+document.form1.hight.value+(document.form1.color?'&color='+document.form1.color.value:''));">
其实这个例子很复杂,为了便于说明,所以假设只有width、hight、color这3个对象,实际上....大概有20个。如果按照4楼的写,那个startRequest会很长很长#-_-,像我这样的javascript白痴,容易搞错符号。所以相对来说3楼的比较简洁。现在的问题是按照3楼的意见,那个onclick="startRequest..."里怎么来调用呢?
<img src="images/像提交按钮的一个图片.png" onclick="startRequest('提交','提交.php?width='+getVal('width')+'&hight='+getVal('height')+'&color='+getVal('color')+'');">调用我在#3楼都写得清清楚楚,你搞不明白就拿4楼的吧
<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>
一直报错误:提示缺少对象,我把我真正的代码贴出来
(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>
按照新的脚本,也是提示缺少对象
以下是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>
现在心里无比畅快!
crying_boy我想请你吃饭。
谢谢大家!
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树中的顺序输出
呵呵,考虑得不周全。radio和checkbox咋办捏??