2011-12-28 56 views
1

編程的問題首先(從W3學校)的onkeyup或onkeypress事件JavaScript事件問題 - 密碼狀態更新

編程實例方法如下(從W3學校)是好的,簡單,它可以在他們的網站,但我我真的很困惑。

onkeypress="return noNumbers(event)" 

爲什麼在函數之前有返回?它有什麼作用?如果你知道這個答案 - 你是如何發現這些信息的?我的猜測是,它允許按鍵功能繼續處理按鍵,因爲我的事件「interupted」它?

- 我一直在想看看'事件'是什麼。它似乎不是一個關鍵字。我花了一小時試圖找到它是什麼。它似乎沒有在代碼示例中的任何地方分配。通常在那個地方你會看到'這個'。如果它是一個未分配的變量,它會一直通過事件處理程序?困惑......

我想打一個密碼強度檢查你鍵入的內容我想用自己的功能

做。我正在看他們的例子,所以我可以弄清楚如何捕獲密鑰(跨瀏覽器和最小的IE7)。我的想法是......

<input type="password" name="pword" maxlength="50" size="50" id="field_pword" onkeyup="PasswordStrength(name, 8, 'relaxed')" onblur="CheckField(name, 8, 1)"> 

注:是的,我知道這是更好地分配HTML之外的事件處理程序,但我看不到的方式將變量傳遞給它,除非它是內嵌。我是一個新手,所以我可能忽略了一些東西,但是...這就是爲什麼我在HTML中做到這一點。

,做不好我怎麼想過去的名字嗎?它確實向函數發送了pword,但是我在那裏做錯了什麼?我應該讓它成爲一個常量字符串嗎?它的工作原理是這樣,但有時候只是因爲某些方法有效......並不意味着它是正確的。 :)

onkeyup="PasswordStrength('pword', 8, 'relaxed')" onblur="CheckField('pword', 8, 1)"> 

我的checkfield函數工作(我用它在每個字段後)我最近添加在PasswordStrength。我的問題是...我的新功能沒有通過事件處理程序,因此如何檢查按下了哪個鍵?我可以這樣做嗎?

onkeyup="PasswordStrength(name, 8, 'relaxed', event)" 

還是應該讀...

onkeyup="return PasswordStrength(name, 8, 'relaxed', event)" 

如果我無法通過任何「事件」是這樣,我的功能,可我準確地得到什麼按下的鍵是沒有一個大的內一團糟的代碼?自從我學習以來,我需要儘可能簡單的例子(請)。

用我的功能我打算做這種方式,但我還是不知道怎麼去按下了哪個鍵...

function PasswordStrength(sField, iMinLength, sStrength, e?) 
{ 
var form = document.forms[0]; 
var gc = form[sField].value; 
    // once I have the value I can do checking but it would be nice to have WHAT key 
    // was pressed 
    // the e? above is where I was thinking of passing the event 

W3例子,我是拉一些知識。 ..

function noNumbers(e) 
{ 
var keynum; 
var keychar; 
var numcheck; 

if(window.event) // IE 
{ 
keynum = e.keyCode; 
} 
else if(e.which) // Netscape/Firefox/Opera 
{ 
keynum = e.which; 
} 
keychar = String.fromCharCode(keynum); 
numcheck = /\d/; 
return !numcheck.test(keychar); 
} 
</script> 

<form> 
Type some text (numbers not allowed): 
<input type="text" onkeypress="return noNumbers(event)" /> 
</form> 

</body> 
</html> 

正如有人正在打字,我要改變使用密碼字段旁邊的innerHTML文說,「弱」,「好」,「好」,「完美」,或沿着這些線路的東西密碼狀態。我很樂意做到這一點,谷歌是如何在圖形的左側做到這一點,但我不知道如何做到這一點。大聲笑。

我的方式是否可以修復?你有沒有更好的方法來做到這一點,我不知道?非常感激。等待智慧的輸入......

+0

你能可能總結你的問題,甚至把它分解成幾個問題嗎?我想幫助你,但這太多消化。我猜測其他人會同意。沒有冒犯的意思 ;)。 – 2011-12-28 23:43:48

+0

嘿那裏 - 我從上面刪除了jquery poll問題,使它更小。我可以問問另一天的jquery。我只是試圖做一個密碼強度檢查器,在您輸入密碼時檢查密碼的強弱。代碼@底部是我從w3學校看到的,但我不明白他們是如何做一些事情的(因此我的在中間,是我正在嘗試的,但我不明白我怎樣才能在我的程序中使用他們的代碼片段我是怎麼做的,底部是我正在檢查的w3例子。盡我所能把它分解成最好的...... – PerryCS 2011-12-28 23:50:09

+0

好的 - 在Google快速搜索之後,我將從這裏開始:http://www.webresourcesdepot.com/10-password-strength-meter-scripts-for-a-better-registration-interface/ – 2011-12-28 23:52:05

回答

1

1)「返回」這個詞使得如果函數返回false,那麼它會傳遞迴事件並停止瀏覽器處理擊鍵(並且出現在輸入字段,如果這是事件是)。

2)event是Event對象,其中包含諸如哪些關鍵WA壓在事件信息,該事件被解僱等

3)是的,它是壞的,你是如何傳遞name,因爲你沒有通過它。改爲使用this.name

4)在這種情況下,您不需要return,因爲您沒有試圖阻止向文本框中添加按鍵。同樣,您不需要通過event,因爲您可以通過this.value來獲取文本框的內容。 5)你可以通過this而不是this.name,this.value或任何其他值。然後,在函數中,從單個參數獲取屬性。

6)一旦你通過this.value傳遞整個值,你可以運行你的測試。絕對不需要知道按鍵是什麼,特別是像Ctrl+V這樣的東西會完全讓你失望。

7)你可以有一個<div>並改變它的寬度和/或背景顏色來製作一種強度指標。

2

只是爲了你的第一個編程問題:

  • 你的建議是正確的,對事件 內返回一個值,可以中斷動作取決於價值的內容。返回false裏面的onclick 會在點擊不了的時候結束。所以<a href="http://test.de" onclick="return false;">linkname</a>將不會鏈接到任何東西,如果 JavaScript處於活動狀態。
  • event只是一個變量,它在運行到實際事件之前進行聲明,下面進一步解釋。

你知道JavaScript中的元素eventhandler屬性嗎? 它們的功能即

document.createElement('div').onclick = function(event){ 
    //do something... 
    return true || false; 
}; 

如果您分配一個onclick屬性標籤,它只是創造這個匿名函數另一種方式調整。因此,

<input onclick="this.value = 'can\'t click me :P Mouse X: ' + event.clientX; return false;" type="text" id="ip" /> 

將表現得好像您創建了一個採用參數event的匿名函數。

window.onload = function(){ 
    document.getElementById('ip').onclick = function(event){ 
    this.value = 'can\'t click me :P Mouse X: ' + event.clientX; return false; 
    }; 
}; 

這將表現除了延遲分配完全相等。

this關鍵字始終是您正在訪問的屬性函數的所有者對象,或者您傳遞給方法/call方法的對象。在這種情況下,它顯然是所有者 - DOM元素。所以this.valueinput的值。

event傳遞給函數僅僅是包含有關當前的瀏覽器狀態和雜項一些有用的信息的對象。它在不同的瀏覽器中具有不同的屬性,具有不同的值,但主要功能在任何地方都是一樣的。

  • 上面解釋它沒有什麼區別,你是否寫你做了什麼,或者這樣:
window.onload = function(){ 
    var yourElement = document.getElementsByTagName('pword')[0]; 
    yourElement.onkeyup = function(event){ 
    PasswordStrength(this.name, 8, 'relaxed') 
    }; 
}; 
  • 不,這不是真的只使用name ..每當你訪問業主對象的財產可以省略this關鍵字。因此,它只是相同衝突的一個有關編寫
<script type="text/javascript">//<![CDATA[ 
onload = function(){ alert('hello!') }; 
//]]></script> 

,而不是window.onloadthis.onload甚至this.window.onload(這是自包含對象的一切都是理論上的工作有一個名爲window屬性,它是指本身)。你可以說這是一個慣例。但是,由於該公約始終在this關鍵字(除了window你應該超過其財產window)接入自己的屬性強烈建立並支持,你應該寫this.name

  • 這取決於您是否要最終中斷事件並且不要讓用戶完成他的keyup。上面的解釋。
  • 爲什麼你不能通過event對象?把它當作一個正常的變量來對待。
  • 結合上面的信息和你的問題中的例子,你應該能夠獲得關於哪個鍵被按下的知識。
+0

謝謝你解釋事件更多。我是一個吸收所有這些信息的海綿......它只是令人沮喪,有時候無法在搜索所有內容時找到清晰簡潔的信息。我習慣了6502彙編語言和書,告訴我 - 如果你用這個函數調用這個函數,並且它返回這個並且保持CPU狀態和函數完全像「this」和「that」那樣。 Web開發看起來像是很多猜測,而當它不應該的時候,它會令人煩惱。大聲笑。需要更嚴格。我感謝您的意見。 – PerryCS 2012-01-02 04:55:56

+0

其他人在你的前一天回答 - 不能給你們兩個人的信用,第一個人的確回答了幾乎所有的事情。我感謝你的時間 - 我現在有更多的知識:) – PerryCS 2012-01-02 04:57:04

+0

@PerryCS沒問題,我很高興如果我可以幫忙!我唯一的一點:「前一天」有點誇大了 - 這是35分鐘(大約午夜);) – Matmarbon 2012-01-02 23:43:55