javaScript 函数传参问题

<script language="javascript">
function checkname(name)
{
if(name.value.length==0)
{
document.getElementById("nameDiv").innerHTML="<font color='red'>用户名不能为空!</font>";
}
}
</script>
--------------------------------------------------------------------
<input name="name" type="text" size="20" onblur="checkname(name)" />
--------------------------------------------------------------------

出不来效果
这样写为什么不对呢??
-------------------------------------------
<script language="javascript">
function checkname()
{
if(document.getElementById("name").value.length==0)
{
document.getElementById("nameDiv").innerHTML="<font color='red'>用户名不能为空!</font>";
}
}
</script>
不传参 这样写就没问题 ~~~~

onblur="checkname(name)"
js认为,这里面的name是一个变量名...也就是为空了,肯定你获取不了.
把name改为this.就可以了.也就是说把当前onblue的这个控件传给了函数.
或者
onblue="checkname('name')"这样,然后把函数改一改:
document.getElementById(name);也可以.
因为这样函数里的name变量就会得到字符串'name',然后再$去获得控件..
这样说,意思应该就明白了吧?
推荐用this传递
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2018-03-29
方案一 ,未保留事件对象作为第一个参数传入

代码如下:

function handler(arg1,arg2){
alert(arg1);
alert(arg2);
}
E.on(document.getElementById('aa'),'click',function(){
handler(arg1,arg2);
});

方案二,保留事件对象作为第一个参数

代码如下:

function handler(e,arg1,arg2){
alert(e);
alert(arg1);
alert(arg2);
}
E.on(document.getElementById('aa'),'click',function(e){
handler(e,arg1,arg2);
});

方案三,给Function.prototype添加getCallback,不保留事件对象

代码如下:

Function.prototype.getCallback = function(){
var _this = this, args = arguments;
return function(e) {
return _this.apply(this || window, args);
};
}
E.on(document.getElementById('aa'),'click',handler.getCallback(v1,v2));

方案四,给Function.prototype添加getCallback,保留事件对象作为第一个参数传入

代码如下:

Function.prototype.getCallback = function(){
var _this = this, args = [];
for(var i=0,l=arguments.length;i<l;i++){
args[i+1] = arguments[i];
}
return function(e) {
args[0] = e;
return _this.apply(this || window, args);
};
}
E.on(document.getElementById('aa'),'click',handler.getCallback(v1,v2));本回答被网友采纳
第2个回答  2009-03-12
<input name="name" type="text" size="20" onblur="checkname(name)" />
改成:
<input name="name" type="text" size="20" onblur="checkname(this)" />

你应该传当前对象this。JS接收参数后应用的是name.value.length 也就是当前对象的value属性的长度。
第3个回答  2009-03-12
<input name="name" type="text" size="20" onblur="checkname(name)" />
这里不能这么写,这里的参数要通过this传过去,你这个写个name表示把一个叫name的变量传过去,所以不行,可以改成:
<input name="name" type="text" size="20" onblur="checkname(this)" />
第4个回答  2019-05-09
<input
name="name"
type="text"
size="20"
onblur="checkname(name)"
/>
这里不能这么写,这里的参数要通过this传过去,你这个写个name表示把一个叫name的变量传过去,所以不行,可以改成:
<input
name="name"
type="text"
size="20"
onblur="checkname(this)"
/>