【Daily】Javascript事件對象

來源:互聯網
上載者:User
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 發布

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.