2014-12-03 3 views
0

Это фрагмент из моей `index.htmlJavaScript не window.location перенаправление на другую страницу

<div class="maincontainer"> 
    <h2 id="heading" class="heading"></h2> 
    <input type="button" id="resetPassword" class="resetPassword" onclick="resetPassword()" value= "Reset Password" /> 
    <form method="post" onsubmit="return submitform()"> 
     <div> 
      <input type="password" id="password" name="password" class="patternlock" /> 
      <input type="submit" value="login"/> 
     </div> 
    </form> 
</div> 

Это фрагмент из моих script.js, которые я включил в свой index.html

function submitform(){ 
var passwordvalue = document.getElementById("password").value; 
var digits = getlength(passwordvalue); 
if(digits<5) { 
    raiseerror("lengthTooSmall"); 
} 

checkduplicatedigits(passwordvalue); 

if (errorraised == false && passwordset == false) { 
    localStorage.setItem("passwordvalue", passwordvalue); 
    successmessage("patternStored"); 
} 
else if (errorraised == false && passwordset == true) { 
    if (localStorage.getItem("passwordvalue") == passwordvalue) { 
     successmessage("screenUnlocked"); 
    } 
    else { 
     raiseerror("IncorrectPattern"); 
    } 
} 
return true; 
}; 

function successmessage(successcode) { 
    if(successcode == "screenUnlocked") { 
     alert("You have unlocked the screen!"); 
     window.location = "./welcome.html"; //bug to be fixed 
    } 
    if (successcode == "patternStored") { 
     alert("Your pattern is stored. Thanks."); 
     passwordset = true; 
    } 
    if (successcode == "resetSuccess") { 
     alert("Pattern Reset Success!"); 
    } 
    location.reload(); 
}; 

Вот когда, successcode == "screenUnlocked" срабатывает, я могу получить предупредительное сообщение

alert("You have unlocked the screen!"); 

но следующая строка

window.location = "./welcome.html"; 

не работает.

Почему это не работает в этом случае? Есть ли какие-либо особые требования для windows.location для работы? Если да, укажите, пожалуйста.

Отметился для этого кода на Google Chrome 39.0.2171.71. Я проверил свою консоль для ошибок, но там не является. Есть только несколько предупреждений, но они не связаны с этим.

Или есть любые другие функции, чтобы сделать перенаправление, используя чистый Javascript? Если да, укажите, пожалуйста.

Прокомментируйте, если требуется дополнительная информация.

+0

Где находится файл 'welcome.html'? В том же самом 'index.html'? – azhpo

+0

Ум, надеюсь, вы знаете, что этот код не безопасен вообще. – epascarello

+0

@azhpo Да, конечно. –

ответ

1

Во-первых, это не безопасно, поэтому я надеюсь, что это не для реальной защиты.

Причина, по которой она терпит неудачу, заключается в том, что у вас есть условие гонки с окном. Форма отправляется, потому что вы не отменяете подачу формы.

Вам нужно вернуть значение false, а не true в конце функции проверки.

+0

Спасибо за информацию. Я должен представить форму во всех других случаях, кроме случаев, когда вызывается 'successmessage (" screenUnlocked ");'. Поэтому return false для submitform() не работает. –

+0

'return true', где вам нужно его отправить. 'return false', когда вам это нужно, чтобы потерпеть неудачу. – epascarello

+0

Да, правильно.Но я действительно озадачен, увидев, что return false не прекращает отправку формы. Это, тем самым, не позволяет перенаправить страницу. –

-1

Я думаю, вам нужно использовать

window.location.href = "./welcome.html"; 

вопрос лучше всего здесь

How to redirect to another webpage in JavaScript/jQuery?

+0

Хотя это может быть технически корректным, 'window.location' должен работать и работать в Chrome. Я подозреваю, что проблема связана с представлением формы. – rfornal

0

ответил заменить

successmessage("screenUnlocked"); 

по

successmessage("screenUnlocked"); 
return false; 
+0

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

+0

Да, я хочу отправить форму в каждом случае, кроме случаев, когда вызывается 'screenmessage (" screenUnlocked ")'. Во всех остальных случаях форма должна быть представлена. –

+0

'successmessage (" screenUnlocked "); return false; 'не работает. Я действительно озадачен, увидев это. –

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