您的位置:首页 > Web前端 > JavaScript

【Daily】Javascript事件对象

2011-09-06 18:19 344 查看
1、二维数组初始化

int arr[5][6] =
{
{ 0, 1, 2, 3, 4, 5},
{10,11,12,13,14,15},
{20,21,22,23,24,25},
{30,31,32,33,34,35},
{40,41,42,43,44,45},
};

2、为dropdownlist增加数据

dropdownlist.Items.Add(new ListItem(arrtype[v1].ToString(),v1.ToString()));

3、动态创建DataTable

比如在做购物车的时候我们需要建立一个datatable,来存放一些购物车中的东西,最后在把他们写到数据库,下面是实现方法。

datatable dt=new datatable("cart");
datacolumn dc1=new datacolumn("prizename",type.gettype("system.string"));
datacolumn dc2=new datacolumn("point",type.gettype("system.int16"));
dt.columns.add(dc1);
dt.columns.add(dc2);
//以上代码完成了datatable的构架,但是里面是没有任何数据的

for(int i=0;i<10;i++)
{
datarow dr=dt.newrow();
dr["prizename"]="娃娃";
dr["point"]=10;
}
//填充了10条相同的记录进去

有人会这么做
datarow dr=new datarow();
.....
dt.rows.add(dr);
这样是不行的,因为一个datarow必定是属于一个datatable的,不能凭空建立,就好比一条记录一定是属于一个表一样

又有人这么做
datarow dr=dt.newrow();
dr["prizename"]="娃娃";
dr["point"]=10;

for(int i=0;i<10;i++)
{
dt.rows.add(dr);
}
这样做同样是错误的,因为datatable已经有这条datarow了,就好比一个表中不可能存在2条一样的记录,必须每次newrow()
http://www.west263.com
4、将SELECT到的多行数据合并为一行,例如:
SELECT COUNTRY_CODE FROM COUNTRY
结果:
101
102
要得到101;102;
DECLARE @xml XML
SET @xml=(SELECT (COUNTRY_CODE +';') FROM COUNTRY FOR XML PATH(''))
SET @STR= CONVERT(NVARCHAR(MAX),@xml)

5、文本框输入回车后触发按钮

5.1. 添加函数searchFocus()
ffunction searchFocus()
{
if(event.keyCode==13)
document.all.btn1.focus();
}

5.2. 如果tb1是客户端控件
在aspx页面中写,
<input id= "tb1 " onkeydown= "javascript:searchFocus() " type= "text ">

如果是服务器端控件,可以用上面的写法或在后台cs文件的Page_Load()中写,
tb1.Attributes.Add( "onkeydown ", "javascript:searchFocus() ");

5.3、javascript中的caller、constructor

caller:
返回一个对函数的引用,该函数调用了当前函数。对于函数来说,caller 属性只有在函数执行时才有定义。如果函数是由顶层调用的,那么 caller 包含的就是 null 。 http://www.cnblogs.com/sunwangji/archive/2006/08/21/482341.html
function callerDemo() {
if (callerDemo.caller) {
var a= callerDemo.caller.toString();
alert(a);
} else {
alert("this is a top function");
}
}
function handleCaller() {
callerDemo();
}

结果:function handleCaller() {
callerDemo();
}

constructor:
把"实例化的对象".constructor 等于"被实例化的类"

function Person(name){
this.name = name;
}
var lenel = new person("lenel");
alert(lenel.constructor === Person);

但是,对象的constructor属性并非指向其构造器,而是指向其构造器的prototype属性的constructor属性
http://apps.hi.baidu.com/share/detail/886207

5.4、javascript的事件对象event
http://www.cnblogs.com/ashun/archive/2006/11/27/event_javascript_ie_firefox_gorush.html

在ie中,事件对象是作为一个全局变量来保存和维护的。 所有的浏览器事件,不管是用户触发
的,还是其他事件, 都会更新window.event 对象。 所以在代码中,只要轻松调用 window.event
就可以轻松获取 事件对象, 再 event.srcElement 就可以取得触发事件的元素进行进一步处理
在ff中, 事件对象却不是全局对象,一般情况下,是现场发生,现场使用,ff把事件对象自动传
递给对应的事件处理函数。在代码中,函数的第一个参数就是ff下的事件对象了。

<button id="btn1">按钮1</button>
<button id="btn2">按钮2</button>
<button id="btn3">按钮3</button>

<script>

window.onload=function(){
document.getElementById("btn1").onclick=foo1
document.getElementById("btn2").onclick=foo2
document.getElementById("btn3").onclick=foo3
}

function foo1(){
//ie中, window.event使全局对象
alert(window.event) // ie下,显示 "[object]" , ff下显示 "undefined"

//ff中, 第一个参数自动从为 事件对象
alert(arguments[0]) // ie下,显示 "undefined", ff下显示 "[object]"
}
function foo2(e){
alert(window.event) // ie下,显示 "[object]" , ff下显示 "undefined"

//注意,我从来没有给 foo2传过参数哦。 现在 ff自动传参数给 foo2, 传的参数e 就是事件对象了
alert(e) // ie下,显示 "undefined", ff下显示 "[object]"
}
function foo3(){ //同时兼容ie和ff的写法,取事件对象
alert(arguments[0] || window.event) // ie 和 ff下,都显示 "[object]"
var evt=arguments[0] || window.event
var element=evt.srcElement || evt.target //在 ie和ff下 取得 btn3对象
alert(element.id) // btn3
}
</script>

看到这里,我们似乎对 ie和ff的事件处理方式都已经理解了,并找到了解决的办法。

但是。。。。事情还没有结束。

看代码
<button id="btn" onclick="foo()">按钮1</button>

<script>
function foo(){
alert(arguments[0] || window.event)
}
</script>

很不幸,我们 foo给我们的结果是 undefined, 而不是期望的 object

原因在于 事件绑定的方式
onclick="foo()" 就是直接执行了, foo() 函数,没有任何参数的,
这种情况下 firefox没有机会传递任何参数给foo
而 btn.onclick=foo 这种情况, 因为不是直接执行函数,firefox才有机会传参数给foo

解决方法:
方法一:比较笨的方法,既然 firefox没有机会传参数,那么自己勤快点,自己传

<button id="btn" onclick="foo(event)">按钮</button>

<script>
function foo(){
alert(arguments[0] || window.event)
var evt=arguments[0] || window.event
var element=evt.srcElement || evt.target
alert(element.id)
}
</script>

通过 Wiz 发布
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: