2016-04-20 4 views
0

Ich brauche die Form zu verstecken aufstyle.display = "block" wird nicht auf das heißt und Chrom arbeiten

<form id="details_form" class="form-horizontal" role="form"> 

vorlegen und zeigen das Spiel "Pacman"

<div id="pacman"></div> 

Ich bin mit style.display Eigenschaft zu verstecken und die div zu zeigen und die Form

$(document).ready(function() { 

_("pacman").style.display = "none"; 

$("form").submit(function(e) { 
    _("details_form").style.display = "none"; 
    if(_("details_form").style.display === "none"){ 
     _("pacman").style.display = "block"; 
    } 
    return false; // prevents page refresh! :) yay!! 
}); 
}); 

On Chrome und IE: it doesn't work!

aber auf Firefox: works as expected

Ich habe beherbergte es auch auf einem Server und überprüft. Aber mit dem gleichen Ergebnis. Was ist los? Überprüfen Sie meinen Code auf Github

+1

Was ist "_" '? Gibt es 'DOMElement' zurück? – Rayon

+2

Das '_ (" details_form "). Style.display =" none "; if (_ ("Details_Form").style.display === "none") {'führt immer zu True – Justinas

+0

ja. Funktion _ (x) { Rückgabe document.getElementById (x); } – Srichakradhar

Antwort

1

Da Sie bereits jQuery haben, ist es nicht sinnvoll, noch einen Ersatz für document.getElementById zu schreiben. Mischen Sie DOM und jQuery nicht so.

Sie wollen wahrscheinlich dieses

$(function() { 
    $("#pacman").hide(); 
    $("#details_form").on("submit",function(e) { 
    e.preventDefault(); // cancel form submission 
    $(this).hide(); 
    $("#pacman").show(); 
    }); 
}); 

UPDATE tun: Das ist ein sehr gutes Beispiel für die X/Y-Problem.

HIER ist Ihr Problem:

<div id="pacman"></div> 

var el = document.getElementById("pacman") 

und später:

blockSize = wrapper.offsetWidth/19, // <<<<< this is 0 on some browsers 
canvas = document.createElement("canvas"); 

canvas.setAttribute("width", (blockSize * 19) + "px"); 
canvas.setAttribute("height", (blockSize * 22) + 30 + "px"); 

schafft

<div id="pacman" style="display: block;"><canvas width="0px" height="30px"></canvas></div> 

in Chrome direkt nach dem "sichtbar machen" div! Verwenden Sie setTimeout

How do I retrieve an HTML element's actual width and height?

+0

Warum nicht mischen? Ein gemischter Code muss auch eine Lösung sein. Da sehe ich im OP-Code kein Problem. –

+0

Ich empfehle dringend, vorhandene Funktionalität NICHT hinzuzufügen, sondern zu standardisieren. Warum verwenden Sie einen getElementById Ersatz, wenn Sie bereits jQuery haben - nicht zu erwähnen, _ _ wird von einem anderen Framework verwendet, das, wie Sie aus den Kommentaren bereits verwirrt Menschen sehen können. – mplungjan

+0

Wenn ich e.preventDefault() verwende, verliere ich Formular Validierung. Also gebe ich false zurück, um eine Seitenaktualisierung zu verhindern. Auch die obige Methode zeigt nicht die Spielfläche. Gibt es ein Problem mit der Initialisierung? 'cuz, wenn ich $ ("# pacman") kommentiere. hide(); es zeigt sich gut ..! – Srichakradhar

0

+1 für mplungjan offenbaren nur jQuery verwenden, um Ihre DOM-Elemente zu manipulieren:

$(document).ready(function() { 
      $("#pacman").hide(); 
      $("form").submit(function(e) { 
       $("#details_form").hide(); 
       if($("#details_form").hide()){ 
        $("#pacman").show(); 
       } 
       return false; // prevents page refresh! :) yay!! 
      }); 
     }); 

Ich schlage vor, immer jQuery besser kennen zu lernen, ist vielleicht hier ein guter Anfang:

  1. https://learn.jquery.com/effects/intro-to-effects/
  2. https://learn.jquery.com/using-jquery-core/manipulating-elements/
+1

Ihre if-Bedingung ist nicht würdig. Entfernen wäre in Ordnung. –

0

Der Täter war dieser Code in der init() Funktion:

blockSize = wrapper.offsetWidth/19, 
canvas = document.createElement("canvas");   
canvas.setAttribute("width", (blockSize * 19) + "px"); 
canvas.setAttribute("height", (blockSize * 22) + 30 + "px"); 

wo Wrapper = div # Pacman. Das Attribut offsetWidth wurde 0, wenn style.display auf "none" gesetzt wurde. Also, Hinzufügen

window.setTimeout(function(){_("pacman").style.display = "none";}, 100); 

hat den Job gemacht.

+0

Ah, ich sehe, Sie haben das Problem gefunden. Also habe ich deine Antwort vorher gesehen :) – mplungjan

+0

: D warum denkst du, hat es nichts in Firefox beeinflusst? – Srichakradhar

+0

Vielleicht ist es schneller als Chrom, um einen Domwechsel zu signalisieren – mplungjan

Verwandte Themen