window.onload=function(){
document.getElementById("test1").onclick=function(){
alert();
};}
</script>
<input type="button" id="test1" name="test">
document.getElementById("test1").onclick=function(){
alert();
};}
</script>
<input type="button" id="test1" name="test">
ie6下 我没有试出来噢
还有点疑问
document.getElementById(window.event.srcElement.id).onclick
不就是等于event.srcElement.onclick吗 (ie下)
一个是ie专有 一个w3c 标准方法即 node.addEventListener() //w3c 方法
node.attachEvent() //ie方法你可以去查下这两个方法的 详细帮助
window.onload这个时候window.event不存在 所以根本不会有window.event.srcElement.id一说了
至于document.getElementById(id).onclick=function这样的写法是没有问题的2 document.getElementById(标签id)与document.getElementById(window.event.srcElement.id)
假如你的事件是作用在一个控件上的时候 这样的写法是没有问题的
那么大可以使用
document.getElementsByTagName("input")的循环来做
<SCRIPT LANGUAGE="JavaScript">
window.onload=function(){ var input = document.getElementsByTagName("input");
for (var i=0;i<input.length ;i++ )
{
input[i].onclick=function(){alert(this.id)}
}
}
</SCRIPT>
<textarea></textarea>
<input type="text" id="test" name="test">
<input type="text" id="test1" name="test">
<input type="text" id="test2" name="test">
页面上有很多标签如(input,select等),用户在文本框中输入内容后,需要触发一个验证函数来验证用户输入的是否正确。所以我想到了window.event.srcElement
页面上有很多标签如(input,select等),用户在文本框中输入内容后,需要触发一个验证函数来验证用户输入的是否正确。所以我想到了window.event.srcElement
<script>
document.onclick=function(event){ss(event)}
function ss(e){
e=e||event
var obj =e.srcElement||e.target
if(obj.type=="text")
{obj.onclick=haha;haha()}
}function haha(){alert("a")}
</script>
<input value="123" type="text" id="test1" >
<input value="234" type="text" id="test2" >
<input type="password" id="test3" >
比如
<script>
onload = function(){
var inps = document.getElementsByTagName('input');
for(var i=0; i<inps.length; i++)
inps[i].onclick = function(){
alert(this.value);
} var sels = document.getElementsByTagName('select');
for(var i=0; i<sels.length; i++)
sels[i].onclick = function(){
alert(this.options[0].text);
}
}
</script>
<input type="text" value="01" /> <select><option>aaa</option></select><br />
<input type="text" value="02" /> <select><option>bbb</option></select><br />
<input type="text" value="03" /> <select><option>ccc</option></select>
window.onload=function(e){
document.getElementById("test").onclick=function(e){
e = e || windows.event; // 为了兼容IE/Firefox
......
}
} 或者,像下面这样,这样做的好处是,
你可以在需要的时候反复的引用这个函数。window.onload=function(e){
document.getElementById("test").onclick=dealClick;
}function dealClick(e){
e = e || windows.event; // 为了兼容IE/Firefox
......
} 另外,W3C推荐使用的方法是 addEventListener, IE下为attachEvent
例:
if(document.all) //IE
document.getElementById("test").attachEvent("onclick",method1);
else //firefox
document.getElementById("test").addEventListener("click",method1,false);
问题2:
document.getElementById(标签id)与document.getElementById(window.event.srcElement.id)的区别在哪里?
只有ID名字不同,
window.event.srcElement, 首先这是IE下的写法,window.event是事件发生时的事件对象,
在firefox下,这个对象只能通过事件处理函数的第一个参数传递给函数。
srcElement 是对于生成事件的 Window 对象、Document 对象或 Element 对象的引用。
因此
window.event.srcElement.id是指生成当前事件的对象的ID,
不过这里既然你已经获得了对象的句柄,也就没有必要再通过getElementById来查询了。
也就是说,
document.getElementById(window.event.srcElement.id) == window.event.srcElement;推荐你去看一看相应的文档。
http://www.w3school.com.cn/htmldom/dom_obj_event.asp
我要的就是这样,但还有点疑问,haha函数中,我需要加入参数,怎么办?像haha(obj)这样。
document.onclick=function(event){ss(event)}
function ss(e){
e=e||event
var obj =e.srcElement||e.target
if(obj.type=="text")
{obj.onclick=function(obj){haha(obj)}
haha(obj);}}function haha(e){alert(e.value)}
</script>
<input value="123" type="text" id="test1" >
<input value="234" type="text" id="test2" >
<input type="password" id="test3" >
if(obj.type=="text")
haha(obj)这个
if(obj.type=="text")
{obj.onclick=function(obj){haha(obj)}
haha(obj);}是错的吧要obj.onclick=function(){haha(this)}传
window.onload=function(){ var input = document.getElementsByTagName("input");
for (var i=0;i<input.length ;i++ )
{
if(input[i].type=="text")
input[i].onclick=function(){haha(this)}
}
}
function haha(obj)
{
alert(obj.value)
}
</SCRIPT>
<textarea></textarea>
<input type="text" id="test" name="test">
<input type="text" id="test1" name="test">
<input type="text" id="test2" name="test">还是<script>
document.onclick=function(event){ss(event)}
function ss(e){
e=e||event
var obj =e.srcElement||e.target
if(obj.type=="text")
haha(obj);}function haha(e){alert(e.value)}
</script>
<input value="123" type="text" id="test1" >
<input value="234" type="text" id="test2" >
<input type="password" id="test3" >
document.onclick=function(event){ss(event)}
function ss(e){
e=e||event
var obj =e.srcElement||e.target
if(obj.type=="text")
{
obj.onclick=function(){haha(this)};//赋一个onclick方法
haha(obj);//直接运行方法
}
function haha(e){alert(e.value)}
</script>
<input value="123" type="text" id="test1" >
<input value="234" type="text" id="test2" >
<input type="password" id="test3" > 看注释就知道了
结果是第一次点的时候alert一次
以后点alert两次
略问下:
上面的高手,平时写js代码,用什么工具呀?用vs.net2005 / vs.net2008的智能提示能力还是太差了。调试又是用什么工具呢?若是用ff,要是把js抽成一个文件,好像调试不到抽出来的文件。说说看。谢谢
再找一个正则表达式的调试工具。
我用的是 RegexBuddy 3
怎么调不到呢? 错误控制台里可以看到错误出来那里啊 ff下调试有firebug 很不错 可以设断点 不过我几乎不用
把obj.onclick改为obj.onfocus
这样的方式 那还要改改
<script>
document.onclick=function(event){ss(event)}
document.onkeyup=function(e){
e=e||event
var key = e.charCode||e.keyCode
if(key==9)
ss(e)
}
function ss(e){
e=e||event
var obj =e.srcElement||e.target
if(obj.type=="text")
{
obj.onclick=function(){haha(this)};//赋一个onclick方法
haha(obj);//直接运行方法
}
}
function haha(e){alert(e.value)}
</script>
<input value="123" type="text" id="test1" >
<input value="234" type="text" id="test2" >
<input type="password" id="test3" >
<script>
document.onclick=function(event){ss(event)}
document.onkeydown=function(e){
e=e||event
var key = e.charCode||e.keyCode
if(key==9)
ss(e)
}
function ss(e){
e=e||event
var obj =e.srcElement||e.target
if(obj.type=="text")
{
//obj.onclick=function(){haha(this)};//这个还要??
haha(obj);
}
}
function haha(e){alert(e.value)}
</script>
<input value="123" type="text" id="test1" >
<input value="234" type="text" id="test2" >
<input type="password" id="test3" >