2016-08-09 111 views
0

Ich habe eine sehr einfache Webseite, die einen Benutzer nach einem Login und Passwort fragt und eine Login-Taste drücken. Das funktioniert im IE einwandfrei, aber nicht in Chrome oder Firefox. Kann mir jemand sagen warum oder wies ich in die richtige Richtung?JavaScript Login-Taste funktioniert in IE, aber nicht in Chrome oder Firefox

<?xml version="1.0" encoding="iso-8859-1" ?> 
<xsl:stylesheet type="application/xsl" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 

<xsl:template match="/"> 

<html> 

<head> 


<title>Test Online Login</title> 

<script> 

<xsl:if test="VFILE_DATA/LOGGED_IN='TRUE'"> 

    // Logged in OK so run menu 

document.URL = "http://gla-web01:91/scripts/test.wsc/vfxmlsws.p?" + 
       "function=system_blank" + 
       "&amp;xsl=Personal.xsl" + 
       "&amp;session_key=<xsl:value-of select="VFILE_DATA/SESSION_KEY"/>"; 

</xsl:if> 


function login(){ 

    // Check to see if login parameters are correct 

    document.URL="http://gla-web01:91/scripts/test.wsc/vfxmlsws.p?"+"function=user_login"+"&amp;server_translate=false"+"&amp;xsl_dir=/vfile_test"+"&amp;user_id="+user.value+"&amp;password="+password.value+"&amp;xsl=install_login.xsl"; 

} 

function checkReturnKey(){ 
    // Test to see if the return key has been pressed 
    if (event.keyCode == 13) 
     login(); 
    } 

</script> 
        <style> 
       table { 
        border-collapse: collapse; 
        width: 100%; 
        font-family:calibri 
       } 

       th, td { 
        text-align: left; 
        padding: 8px; 
        font-family:calibri 
       } 

       tr:nth-child(even){background-color: #E4E4E4} 

       th { 
        background-color: #eedaff; 
        color: black; 
        text-align: left; 
        font: 16px/24px Helvetica Neue, "Arial", Helvetica, Verdana, sans-serif; 
        width: 100%; 
       } 

       label {  
        color: #666; 
        text-align: left; 
        font: 16px/24px Helvetica Neue, "Arial", Helvetica, Verdana, sans-serif; 
        width: 100%; 

       } 
       </style> 
</head> 


<body> 

<div id="title"><h2>Test User Login</h2> 
<hr></hr></div> 



    User:<input id="user" type="text" onkeypress="checkReturnKey()"/> 

    Password:<input id="password" type="password" onkeypress="checkReturnKey()"/> 


    <input class="loginButton" type="button" value="Login" onclick="login()"/> 
    <button onclick="login()">Login2</button> 
<xsl:if test="VFILE_DATA/LOGGED_IN='FALSE'"> 
<P/> 
Invalid Login 

</xsl:if> 


</body> 

</html> 

</xsl:template> 
</xsl:stylesheet> 

Wie Sie sehen, habe ich zwei verschiedene Methoden der Codierung der Anmeldeschaltfläche ausprobiert, beide funktionieren im IE, aber weder in Chrome noch in FireFox.

Ich habe mehrere ähnliche Themen zu diesem Thema lesen:

Why this button works in IE but not in Firefox?

XSLT works in IE, not in Chrome or Firefox

Why this button works in IE but not in Firefox?

Javascript works in IE but not in Chrome

javascript works in IE but not in firefox

aber nichts hat geholfen. Ich bin sicher, dass es etwas sehr einfaches sein muss, das ich vermisse, aber es nicht herausfinden kann!

Danke,

Antwort

0

ok stellt sich heraus, es war einfach, haben sollte location.href statt document.url Verwendung für sie in Chrom zu arbeiten.

0

(Diese hat ein Duplikat zu sein.)

keyCode ist Microsoft-spezifisch. Es ist which auf anderen Browsern. Also:

function checkReturnKey(){ 
    // Test to see if the return key has been pressed 
    if ((event.keyCode || event.which) == 13) { 
     login(); 
    } 
} 

, die aufgrund von JavaScript funktioniert curiously-powerful || operator, die kein logisches Ergebnis hat; stattdessen ist sein Ergebnis der erste Operand, wenn dieser Operand truthy ist, oder der zweite Operand, falls nicht. Also, wenn event.keyCode ein truthy Wert ist (undefined ist falsy), vergleichen wir 13 mit diesem Wert; Wenn es falsch ist (undefined, zum Beispiel), vergleichen wir event.which mit 13 stattdessen.

Ich glaube, dass Sie auch auf keydown tun möchten, nicht keypress; z.B .:

<input id="user" type="text" onkeydown="checkReturnKey()"/> 
<!-- -----------------------------^^^^     --> 
+0

Danke, es kann tatsächlich ein Duplikat sein, aber ich habe nichts gefunden, das hilft. Gut zu wissen, dass der KeyCode Microsoft Specific ist, wusste das nicht, also habe ich meinen Code geändert. Das Problem wurde jedoch nicht gelöst, da beim Drücken der Taste oder beim Drücken der Taste nichts passiert. – KT79

+0

@ KT79: Haben Sie dieses Bit gesehen? * "Ich glaube, dass du das auch auf Keydown machen willst, nicht auf Tastendruck." * Ich habe die Antwort aktualisiert, um ein Beispiel zu diesem Satz hinzuzufügen (und ihn bis zum Ende verschoben). Komischerweise beantwortete ich einfach diese andere Frage (http://stackoverflow.com/a/38846778/157247) mit etwas, das mich schnell überprüfen ließ, und ja, du willst definitiv 'keypress' nicht, um Schlüssel 13 zu erkennen. –

+0

ja sorry sah das auch und novelliert dazu (ich wollte definitiv keinen Tastendruck!) Aber es tut immernoch nichts wenn die Return-Taste gedrückt wird oder der Login-Button geklickt hat, es macht mich wahnsinnig! Danke für Ihre Hilfe! – KT79