2012-06-08 53 views
3

我正在使用AjaxControlToolKit的PasswordStrength控件。一旦用戶開始在控件中輸入任何內容,它就會開始顯示密碼較弱的消息。我希望這個消息只在輸入最小數量的字符後纔會出現。在控件上我沒有看到任何允許此功能的東西。我應該如何處理這個問題的任何建議?如何只在最少字符後檢查密碼強度?

回答

1

您可能需要爲此推出自己的解決方案,如果您仔細考慮,那麼這很有意義。通過隱藏兩個字符的密碼較弱的視覺提示,但將其顯示爲三個字符的密碼似乎意味着兩個字符的密碼就足夠了。

話雖這麼說你可能能夠做的是寫某種黑客與此類似:

<script language="javascript"> 
    function onPasswordChange(textBox) { 
     var passwordLabel = document.getElementById([labelID]); 
     if(textBox.value.length < [constant]){ 
      passwordLabel.style.display = 'none'; 
     } 
     else{ 
      passwordLabel.style.display = 'inline';    
     } 
    } 
</script> 

然後,您可以附加此功能的控制 變化 的onkeyup或onKeyDown事件使如果密碼字段的長度小於你想要的長度,它將隱藏包含強度未被滿足的消息的標籤。這未經考驗只是一個想法。你可能會從工具包javascript中碰到這個腳本,但很難說。

此外,labelID看起來是[controlIDName] _PasswordStrength。

編輯:

你可能會想在 平變化 的onkeyup或onKeyDown事件添加到您的控制,像這樣(代碼後面):

control.Attributes.Add( 「平變化」,「 onPasswordChange(這)「);

control.Attributes.Add("onKeyDown", "onPasswordChange(this)"); 

編輯2: 至於黑客去,這是非常混亂,但它的工作原理。客戶方:

<asp:ScriptManager ID="ScriptManager1" runat="server"> 
</asp:ScriptManager> 

<asp:TextBox ID="password" runat="server"></asp:TextBox> 
<div id="PasswordStrengthContainer"></div> 
<asp:PasswordStrength ID="PS" runat="server" 
TargetControlID="password" 
DisplayPosition="RightSide" 
StrengthIndicatorType="Text" 
PreferredPasswordLength="10" 
PrefixText="Strength:" 
TextCssClass="TextIndicator_TextBox1" 
MinimumNumericCharacters="0" 
MinimumSymbolCharacters="0" 
RequiresUpperAndLowerCaseCharacters="false" 
TextStrengthDescriptions="Very Poor;Weak;Average;Strong;Excellent" 
TextStrengthDescriptionStyles="cssClass1;cssClass2;cssClass3;cssClass4;cssClass5" 
CalculationWeightings="50;15;15;20" 
/> 

<script language="javascript"> 


function onPasswordChange(textBox) { 
    var passwordLabel = document.getElementById("MainContent_password_PasswordStrength"); 
    var container = document.getElementById("PasswordStrengthContainer"); 

    if (passwordLabel != null) { 
     document.getElementById("PasswordStrengthContainer").appendChild(
      document.getElementById("MainContent_password_PasswordStrength")); 
    } 

    if (textBox.value.length < 4) { 
     container.style.display = 'none'; 
    } 
    else { 
     container.style.display = 'inline'; 
    } 
} 
</script> 

Serverside集團:

password.Attributes.Add("onKeyDown", "onPasswordChange(this)"); 
password.Attributes.Add("onBlur", "onPasswordChange(this)"); 

這個代碼是沒有效率的,並且可以清理,但工程示範的目的。 JavaScript函數是非常基本的,但是你會發現這條線:

if (passwordLabel != null) { 
     document.getElementById("PasswordStrengthContainer").appendChild(
      document.getElementById("MainContent_password_PasswordStrength")); 
    } 

不幸的是JavaScript函數將火災後您的功能,所以在顯示設置爲「無」的工具包是通過工具包一掃而光。這段代碼的作用是從頁面中移除標籤並將其放置在div中,然後我們只需將div的顯示屬性設置爲任何內容,這將有效地隱藏標籤。但是有一個奇怪的錯誤:當按退格刪除字符時,div在某些情況下不會消失。我真的沒有時間來追蹤這個問題,但清理它應該是微不足道的。

此外,我在Chrome中使用onChange出現了一些問題,所以選擇了onKeyDown,而不是像@Adriano上面指出的那樣。

+0

*「似乎暗示着兩個字符的密碼就足夠了」*在系統中,兩個字符的密碼是*非法*。由於它根本無法完成,所以強弱無關並不重要。也有可能有消息表明「你沒有達到最小字符限制」,它同時消失。 – Servy

+0

我明白這一要求,但我所說的是,如果控件在用戶輸入第三個字符之前不向用戶顯示警告,那麼它會給用戶一個雙字符密碼有效的印象。我同意一個信息,即最短長度未被滿足將是一個可以接受的替代品,不會顯示任何內容。 – dparsons

+0

輸入小於字符的最小要求後,一旦用戶跳出並進入確認密碼文本框,它將顯示關於最小值的錯誤消息。 – 4thSpace

2

附加到客戶端 change keyup事件的文字輸入。您可以在TextCssClass(如果您正在使用文本)中添加/刪除一個特殊的CSS類,但只有一條規則:display: none(使用文本長度作爲條件)。

+0

你能給一個例子說明如何使用條件嗎? – 4thSpace

+0

@ abszero提供的@ 4thSpace代碼是很好的,「更改」事件是相當難以捉摸的。將您的事件處理程序附加到「keyup」事件(這是PasswordStrength控件的作用:http://ajaxcontroltoolkit.codeplex.com/SourceControl/changeset/view/2c482e5ad6c4#Client%2fMicrosoftAjax.Extended%2fPasswordStrength%2fPasswordStrengthExtenderBehavior.pre.js)。 –

+0

注意:我更喜歡使用TextCssClass屬性直接訪問帶有getElementById的標籤,因爲如果控件中的某些內容發生更改,它就不會被破壞,但它仍然可以工作。 –