2014-10-03 2 views
2

моя проблема заключается в том, что text3 не определено в моих кодов здесь:функция не работает в моем коде

t += text2 + "Case #" + i + ":" + "<br>" + text3 + "<br>"; 

но здесь:

$('#pass').keyup(function (e) { 
    var strong = new RegExp("^(?=.{11,})(((?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[a-z])(?=.*\\W))|((?=.*[a-z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]))).*$", "g"); 
    var normal = new RegExp("^(?=.{4,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[a-z])(?=.*\\W))|((?=.*[0-9])(?=.*\\W))).*$", "g"); 
    if (strong.test($(this).val())) { 
     text3 = "strong"; 
    } else if (normal.test($(this).val())) { 
     text3 = "normal"; 
    } else { 
     text3 = "weak"; 
    } 
    return true; 
}); 

здесь все мой код:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="UTF-8"> 
</head> 
<body> 
<p><input placeholder="number of tests" type="text" name="numbers" id="x"/></p> 
<div id="passdiv"></div> 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script> 

<script type="text/javascript"> 

    $('#x').keyup(function (e) { 

     var i; 
     var text2 = ''; 
     var t = ""; 
     var x = document.getElementById("x").value; 
     for (i = 1; i <= x; i++) { 
      text2 = '<p><input placeholder="test NO. ' + i + '" type="password" id="pass" /></p>'; 
      t += text2 + "Case #" + i + ":" + "<br>" + text3 + "<br>"; 
     } 
     document.getElementById("passdiv").innerHTML = t; 

     return true; 
    }); 

    $('#pass').keyup(function (e) { 
     var strong = new RegExp("^(?=.{11,})(((?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[a-z])(?=.*\\W))|((?=.*[a-z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]))).*$", "g"); 
     var normal = new RegExp("^(?=.{4,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[a-z])(?=.*\\W))|((?=.*[0-9])(?=.*\\W))).*$", "g"); 
     if (strong.test($(this).val())) { 
      text3 = "strong"; 
     } else if (normal.test($(this).val())) { 
      text3 = "normal"; 
     } else { 
      text3 = "weak"; 
     } 
     return true; 
    }); 

</script> 
</body> 
</html> 

В чем проблема? пожалуйста, помогите

+0

'для (я = 1, я <= х, я ++) { '- на самом деле не имеет смысла для меня. Вы понимаете, что это означает, что это будет «работать», если значение «x» является целым числом, верно? – stealthyninja

+0

@stealthyninja да первый вход работает только с целым числом –

+0

действительно никого !? –

ответ

2

Похоже $('#x').keyup() вызывается перед тем $('#pass').keyup()

+0

Я изменил его, но проблема все еще существует –

-1

text3 не установлен в качестве переменной в коде, поэтому он всегда будет неопределенным. Вам нужно установить его перед двумя вашими функциями.

Примечание: Я также помещаю вещи внутри функции jQuery ready.

По какой-то причине я быть downvoted, но я проверил это, и это работает

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="UTF-8"> 
</head> 
<body> 
<p><input placeholder="number of tests" type="text" name="numbers" id="x"/></p> 
<div id="passdiv"></div> 

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js" type="text/javascript"></script> 

<script type="text/javascript"> 

$(function(){ 
    // set text3 in here first 
    var text3 = ""; 

    $('#x').keyup(function (e) { 

     var i; 
     var text2 = ''; 
     var t = ""; 
     var x = document.getElementById("x").value; 
     for (i = 1; i <= x; i++) { 
      text2 = '<p><input placeholder="test NO. ' + i + '" type="password" id="pass" /></p>'; 
      t += text2 + "Case #" + i + ":" + "<br>" + text3 + "<br>"; 
     } 
     document.getElementById("passdiv").innerHTML = t; 

     return true; 
    }); 

    $('#pass').keyup(function (e) { 
     var strong = new RegExp("^(?=.{11,})(((?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[a-z])(?=.*\\W))|((?=.*[a-z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]))).*$", "g"); 
     var normal = new RegExp("^(?=.{4,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[a-z])(?=.*\\W))|((?=.*[0-9])(?=.*\\W))).*$", "g"); 
     if (strong.test($(this).val())) { 
      text3 = "strong"; 
     } else if (normal.test($(this).val())) { 
      text3 = "normal"; 
     } else { 
      text3 = "weak"; 
     } 
     return true; 
    }); 

}); 
</script> 
</body> 
</html> 

Также здесь скрипку его работать http://jsfiddle.net/gsuy4t27/

+0

что мне не хватает? Почему люди меня вторгаются? – roryok

+0

Потому что вы ошибаетесь. Переменная задана в обработчике '$ (" # pass "). Keyup()'. – Barmar

+0

«это всегда будет неопределенным» - неправда. добро пожаловать в уродливый мир глобальных переменных JS. –

0

Ваш вызов $('#x').keyup(function (e) { создает первый слушатель события так что на клавиатуре вы всегда будете получать text3 is undefined, потому что $('#pass').keyup(function (e) { будет запускаться всегда позже.

EDIT:

Обработчик второй KeyUp никогда не будет работать, потому что он будет захватывать #pass элемент только один раз (в документе синтаксического анализа). Чтобы исправить это, вам нужно создать отложенного слушателя. // В любом случае это не исправит проблему text3 is undefined.

Что вам нужно сделать, так это определить его перед двумя обработчиками .keyup.

Примечание:

Но, пожалуйста, не устанавливать глобальные переменные в любом случае;) Положите все в закрытии или что-то.

И последнее, но не менее важное: НЕ ДЕЛАЕТ создать множество элементов с одинаковым идентификатором, это основная ошибка.

+0

Функции вызываются в порядке, который пользователь вводит в полях, а не в том порядке, в котором они определены. – Barmar

+0

Извините, что я плохой, но как вы хотите что-то сделать в своей переменной 'text3', когда вы ее никогда не вводили? – veritas

0

Посмотрите, даже после исправления кода, чтобы заставить его работать, это имеет мало смысла. Используя roryok's jsFiddle, он будет работать только в том случае, если значение, которое вы вводите, является числом, и это просто порождает элементы абзаца для введенного вами числа. Вы можете ввести столько чисел, сколько захотите (до сбоя вашего браузера), он всегда будет возвращаться как «слабый».

Если вы считаете, что это простой проксиметр прочности пароля, если вы не можете объяснить логику, которую вы пытаетесь достичь, заставив ее придерживаться цифр, я бы сбросил большую часть кода JavaScript и уменьшил его до

$('#x').keyup(function (e) { 
    document.getElementById("passdiv").innerHTML = strength($(this).val()); 

    return true; 
}); 

function strength(val) {  
    var strong = new RegExp("^(?=.{11,})(((?=.*[A-Z])(?=.*[a-z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[a-z])(?=.*\\W))|((?=.*[a-z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[0-9])(?=.*\\W))|((?=.*[A-Z])(?=.*[a-z])(?=.*[0-9]))).*$", "g"); 
    var normal = new RegExp("^(?=.{4,})(((?=.*[A-Z])(?=.*[a-z]))|((?=.*[A-Z])(?=.*[0-9]))|((?=.*[a-z])(?=.*[0-9]))|((?=.*[a-z])(?=.*\\W))|((?=.*[0-9])(?=.*\\W))).*$", "g"); 
    if (strong.test(val)) { 
     t = "strong"; 
    } else if (normal.test(val)) { 
     t = "normal"; 
    } else { 
     t = "weak"; 
    } 
    return t; 
} 

Это будет проверять выводится исходная каждый раз при вводе символа, который пользователь может представить, как только это «сильный».

Вот мой jsFiddle: http://jsfiddle.net/xqooj482/

+0

не всякая вещь, которую я хочу! –

Смежные вопросы