導航:首頁 > 編程語言 > jsthisonclick

jsthisonclick

發布時間:2023-03-03 07:01:41

A. javaScript 關於this的賦值問題

this是JavaScript中功能最強大的關鍵字之一。不幸的是,如果你不知道它具體怎麼工作,你將很難正確使用它。

this是面向對象語言中的一個重要概念,在JAVA,C#等大型語言中,this固定指向運行時的當前對象。但是在javascript中,由於
javascript的動態性(解釋執行,當然也有簡單的預編譯過程),this的指向在運行時才確定。這個特性在給我們帶來迷惑的同時也帶來了編程上的
自由和靈活,結合apply(call)方法,可以使js變得異常強大。
2.變化的this

在JavaScript中,this通常指向的是我們正在執行的函數本身,或者是指向該函數所屬的對象(運行時)。當我們在頁面中定義了函數
doSomething()的時候,它的owner是頁面,或者是JavaScript中的window對象(或
global對象)。對於一個onclick屬性,它為它所屬的HTML元素所擁有,this應該指向該HTML元素。
2.1在幾種常見場景中this的變化

函數示例
function doSomething ()
{
alert(this.navigator);
//appCodeName
this.value = "I am from the Object constructor";

this.style.backgroundColor = "# 000000";
}
1.
(A)作為普通函數直接調用時,this指向window對象.
2. (B)作為控制項事件觸發時
1) inline event
registration 內聯事件注冊 .將事件直接寫在HTML代碼中(<element

onclick=」doSomething()」>), 此時this指向 window對象 。
2) Traditional event
registration 傳統事件注冊 (DHTML方式).
形如 element.onclick = doSomething; 此時this指向
element對象
3) <element onclick=」doSomething(this)」>作為參數傳遞可以指向element

3. (C)作為對象使用時this指向當前對象。形如:new doSomething();
4. (D)使用apply
或者call方法時,this指向所傳遞的對象。
形如:var obj={}; doSomething.apply(obj,new
Array(」nothing」); //thisàobj

下面我來闡述如何在事件處理中來使用this,之後我會附加一些this相關的例子。
Owner

接下來文章中我們將要討論的問題是:在函數doSomething()中this所指的是什麼?
Javascript代碼
function doSomething() {

this.style.color = '#cc0000';
}
function doSomething() {

this.style.color = '#cc0000';
}

在JavaScript中,this通常指向的是我們正在執行的函數本身(譯者註:用owner代表this所指向的內容),或者是,指向該函數所屬的對象。當我們在頁面中定義了函數doSomething()的時候,它的owner是頁面,或者是JavaScript中的window對象(或
global對象)。對於一個onclick屬性,它為它所屬的HTML元素所擁有,this應該指向該HTML元素。

這種「所有權」就是JavaScript中面向對象的一種方式。在Objects as associative arrays中可以查看一些更多的信息。

如果我們在沒有任何更多准備情況下執行doSomething(),this關鍵字會指向window,並且該函數試圖改變window的
style.color。因為window並沒有style對象,這個函數將非常不幸的運行失敗,並產生JavaScript錯誤。
Copying

因此如果我們想充分利用this,我們不得不注意使用this的函數應該被正確的HTML元素所擁有。換句話說,我們應該復制這個函數到我們的onclick屬性。Traditional
event registration會關心它。
Javascript代碼
element.onclick = doSomething;

element.onclick = doSomething;
這個函數被完整復制到onclick屬性(現在成為了函數)。因此如果這個event
handler被執行,this將指向HTML元素,並且該元素的顏色得以改變。

這種方法使得我們能夠復制這個函數到多個event handler。每次this都將指向正確的HTML元素:

這樣你就可以最大限度使用this。每當執行該函數,this所指向的HTML元素都正確響應事件,這些HTML元素擁有doSomething()的一個拷貝。

Referring
然而,如果你使用inline event registration(內聯事件注冊)
Javascript代碼

<element onclick="doSomething()">
<element
onclick="doSomething()">

你將不能拷貝該函數!反而這種差異是非常關鍵的。onclick屬性並不包含實際的函數,僅僅是一個函數調用。
Javascript代碼

doSomething();
doSomething();

因此,它將聲明「轉到doSomething()並且執行它」。當我們到達doSomething(),this關鍵字又重新指向了全局的window對象,函數返回錯誤信息。

The difference

如果你想使用this來指向HTML元素響應的事件,你必須確保this關鍵字被寫在onclick屬性里。只有在這種情況下它才指向event
handler所注冊的HTML元素。
Javascript代碼
element.onclick = doSomething;

alert(element.onclick)
element.onclick = doSomething;

alert(element.onclick)
你將得到
Javascript代碼
function doSomething()
{
this.style.color = '#cc0000';
}
function doSomething() {

this.style.color = '#cc0000';
}

正如你所見,this關鍵字被展現在onclick函數中,因此它指向HTML元素。
但是如果執行
Javascript代碼

<element onclick="doSomething()">
alert(element.onclick)

<element onclick="doSomething()">
alert(element.onclick)
你將得到

Javascript代碼
function onclick() {
doSomething()
}
function
onclick() {
doSomething()
}

這僅僅是到doSomething()函數的一個引用。this關鍵字並沒有出現在onclick函數中,因此它不指向HTML元素。
例子--拷貝

下面的例子中,this被寫入onclick函數里:
Javascript代碼
element.onclick = doSomething

element.addEventListener('click', doSomething, false)
element.onclick =
function() {this.style.color = '#cc0000';}
<element
onclick="this.sytle.color = '#cc0000';">
element.onclick = doSomething

element.addEventListener('click', doSomething, false)
element.onclick =
function() {this.style.color = '#cc0000';}
<element
onclick="this.sytle.color = '#cc0000';">
例子--引用
下述情況中,this指向window:

Javascript代碼
element.onclick = function() {doSomething()}

element.attachEvent('onclick', doSomething)
<element
onclick="doSomething()">
element.onclick = function() {doSomething()}

element.attachEvent('onclick', doSomething)
<element
onclick="doSomething()">
注意attachEvent()的出現。Microsoft event registration
model最主要的弊端是attachEvent()創建了一個指向函數的引用,而不是復制它。因此有時不可能知道哪個HTML正在處理該事件。
組合使用

當使用內聯事件注冊時,你可以將this發送到函數以至於可以正常使用:
Javascript代碼
<element
onclick="doSomething(this)">
function doSomething(obj) {

//this出現在event handler中並被發送到函數
//obj指向HTML元素,因此可以這樣:
obj.style.color
= '#cc0000';
}

B. 這兩個區別 在哪裡 還有js事件中 onclick=abc(this) 這個this是 dom元素嗎

this的確是觸發事件本身的dom。所以dom的name屬性為ac。
var person1={ 'name':'wang' };
var person2={ name:'wang' };
都是符合json的格式的 ;
唯一要說不同的內話,假容設person2沒有name屬性
var person2={ key:'wang' };
則列印出來不一樣了。
alert(person2['name']); //列印 null
alert(person2.name); // js報錯 缺少對象
希望對你有幫助。

C. javascript中onclick(this) 中的this指當前什麼東西

舉個例子吧來
<input type=button id='123' value='clickme' onclick=testFunction(this)>

那麼
testFunction(obj){
alert(「button id = 」obj.id);
alert(「button value = 」obj.value);

}

當你源點擊這個按鈕的時候會彈出button id = 123,
然後彈出 button value = clickme
這回知道this 是什麼了吧

D. 怎樣使js中的onclick事件只觸發一次,就是我點擊了一次,再次點擊的時候不讓其再觸發

解決的方法:

1、用jQuery的方式

jQuery專門為此功能提供了一個函數one。這樣寫就能讓click這個事件只執行一次。

$("#btn3").one('click',function(){

alert('jQuey的one函數,第1次點擊');

});

(4)jsthisonclick擴展閱讀:

jQuery的模塊可以分為3部分:入口模塊、底層支持模塊和功能模塊。

在構造jQuery對象模塊中,如果在調用構造函數jQuery()創建jQuery對象時傳入了選擇器表達式,則會調用選擇器Sizzle遍歷文檔,查找與之匹配的DOM元素,並創建一個包含了這些DOM元素引用的jQuery對象。

瀏覽器功能測試模塊提供了針對不同瀏覽器功能和bug的測試結果,其他模塊則基於這些測試結果來解決瀏覽器之間的兼容性問題。

在底層支持模塊中,回調函數列表模塊用於增強對回調函數的管理,支持添加、移除、觸發、鎖定、禁用回調函數等功能;

非同步隊列模塊用於解耦非同步任務和回調函數,它在回調函數列表的基礎上為回調函數增加了狀態,並提供了多個回調函數列表,支持傳播任意同步或非同步回調函數的成功或失敗狀態;

數據緩存模塊用於為DOM元素和Javascript對象附加任意類型的數據;隊列模塊用於管理一組函數,支持函數的入隊和出隊操作,並確保函數按順序執行,它基於數據緩存模塊實現。



E. js onclick 調用函數失敗,求助,,懷疑onclick 不能識別jquery 的this。

你的this沒有傳過來。
你現在傳進去的是id,可以把版$(this)改成權 $("#"+id);

或者 onclick="GetPerson(this)";
function getPerson(obj)
{
if($(obj).index....
}

閱讀全文

與jsthisonclick相關的資料

熱點內容
win10開機密碼屏幕鍵盤 瀏覽:162
文件夾樂高 瀏覽:914
外置文件夾掛載 瀏覽:304
人人視頻本地緩存文件 瀏覽:194
java俄羅斯方塊項目描述 瀏覽:354
win10系統被凍結 瀏覽:460
excel文件批量合並 瀏覽:948
linuxxmind 瀏覽:93
蘋果電腦安全軟體 瀏覽:195
u深度取消贊助密碼 瀏覽:168
編程寫東西都寫得是什麼 瀏覽:35
蔚來怎麼推薦app 瀏覽:269
6s輸入密碼來使用siri 瀏覽:742
程序員黑客頭像酷 瀏覽:739
mvc接受上傳文件 瀏覽:365
程序員可以轉金融嗎 瀏覽:193
無需用戶名密碼的共享 瀏覽:775
一加怎麼和win10傳輸文件 瀏覽:425
大數據分析哪些行業 瀏覽:848
win10刪除自動更新文件在哪裡 瀏覽:581

友情鏈接