Spalte nur darstellen wenn scripts deaktiviert sind.
Nijin
- browser
Hallo zusammen.
Ich bin seit heute Abend damit beschäftigt meine Website so zu optimieren dass sie komplett W3-Valide ist.
Nur bin ich momentan auf folgendes Problem gestoßen:
Ich führe einen Browerstest durch und möchte u.a. prüfen ob der Benutzter Javascript aktiviert hat. Dafür verwende ich folgenden Code:
<noscript><td bgcolor="#FF0000">Nicht Erlaubt.</td></noscript>
<script type="text/javascript">
document.write("<td bgcolor=\"#00CC00\">Erlaubt.</td>");
</script>
Dies funktioniert so auch einwandfrei, leider bekomme ich beim W3 diese Fehlermeldung:
-->
document type does not allow element "NOSCRIPT" here; missing one of "TH", "TD" start-tag
<noscript><td bgcolor="#FF0000">Nicht Erlaubt.</td></noscript>
The mentioned element is not allowed to appear in the context in which you've placed it; the other mentioned elements are the only ones that are both allowed there and can contain the element mentioned. This might mean that you need a containing element, or possibly that you've forgotten to close a previous element.
One possible cause for this message is that you have attempted to put a block-level element (such as "<p>" or "<table>") inside an inline element (such as "<a>", "<span>", or "<font>").
<--
Es ist jetzt das erste mal, dass ich aktiv mit dem Valdidator arbeite, aber so wie ich das erkenne möchte er einfach, dass der <td> Tag den <noscript> Tag einklammert und nicht andersrum:
<td bgcolor="#FF0000"><noscript>Nicht Erlaubt.</noscript></td>
<script type="text/javascript">
document.write("<td bgcolor=\"#00CC00\">Erlaubt.</td>");
</script>
Dies ist zwar dann valide, aber erzeugt leider eine rote (leere) Spalte bei Usern die Javascript aktiviert haben. Das soll natürlich nicht so sein.
Ich hoffe ich habe mein Problem verständlich geschildert und jemand von euch kennt eine Möglichkeit es zu lösen.
Hi,
<td bgcolor="#FF0000"><noscript>Nicht Erlaubt.</noscript></td>
<script type="text/javascript">
document.write("<td bgcolor="#00CC00">Erlaubt.</td>");
</script>
>
> Dies ist zwar dann valide, aber erzeugt leider eine rote (leere) Spalte bei Usern die Javascript aktiviert haben.
Dann pack' doch das SCRIPT-Element einfach ebenfalls in dieses TD (und lasse es dann kein TD mehr ausgeben, sondern nur noch den Text, oder ggf. noch ein Element drumherum, wenn du den Text farblich noch gesondert formatieren willst).
MfG ChrisB
--
“Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
Hi,
<td bgcolor="#FF0000"><noscript>Nicht Erlaubt.</noscript></td>
<script type="text/javascript">
document.write("<td bgcolor="#00CC00">Erlaubt.</td>");
</script>
> >
> > Dies ist zwar dann valide, aber erzeugt leider eine rote (leere) Spalte bei Usern die Javascript aktiviert haben.
>
> Dann pack' doch das SCRIPT-Element einfach ebenfalls in dieses TD (und lasse es dann kein TD mehr ausgeben, sondern nur noch den Text, oder ggf. noch ein Element drumherum, wenn du den Text farblich noch gesondert formatieren willst).
>
> MfG ChrisB
>
>
Hallo Chris,
danke für die schnelle Antwort. Du meinst wahrscheinlich so oder?
~~~html
<td>
<noscript>Nicht Erlaubt.</noscript>
<script type="text/javascript">
document.write("Erlaubt.");
</td>
</script>
Diese Idee hatte ich auch schon, jedoch keine Ahnung wie ich es mit den Farben ändern kann. Vllt habe ich auch nach den Falschen Wörtern gegoogelt.
Kannst du mir noch schnell auf die Sprünge helfen?
Hi,
Diese Idee hatte ich auch schon, jedoch keine Ahnung wie ich es mit den Farben ändern kann.
So, wie ich es gerade beschrieb - pack den Text in weiteres Element, und formatiere dieses mit CSS. (Und bevor du dazu wieder fragst, informiere dich bitte - bspw. im CSS-Kapitel von SELFHTML.)
MfG ChrisB
Und bevor du dazu wieder fragst,
Tut mir leid dass ich in einem Forum(!) eine Frage gestellt habe - Es ist nicht immer klar was jemand mit "ein Element drumherum" meint.
Ich interpretiere es jetzt einfach so, dass du mir sagen willst z.B. ein <u> Element zu benutzen, dem den Unterstrichwert per CSS zu entziehen ( font-style:normal; ) und anschließend die Tabelle dadurch zu färben.
Jedoch ist im CSS-Kapitel keine Möglichkeit genannt, die Spaltenfarbe auserhalb des <td> Elements zu ändern und Das kann ich selbstverständlich nicht benutzen.
Hi,
Tut mir leid dass ich in einem Forum(!) eine Frage gestellt habe - Es ist nicht immer klar was jemand mit "ein Element drumherum" meint.
Was kann daran im vorliegenden Zusammenhang unklar sein?
Ich interpretiere es jetzt einfach so, dass du mir sagen willst z.B. ein <u> Element zu benutzen, dem den Unterstrichwert per CSS zu entziehen ( font-style:normal; ) und anschließend die Tabelle dadurch zu färben.
Warum ein U-Element? SPAN existiert.
Jedoch ist im CSS-Kapitel keine Möglichkeit genannt, die Spaltenfarbe auserhalb des <td> Elements zu ändern und Das kann ich selbstverständlich nicht benutzen.
Wieso ausserhalb?
Natürlich kannst du die Farbe von etwas, was sich ausserhalb eines Elements befindet, nicht ändern, in dem du das Element formatierst.
Aber in deinem Beispiel war es nur jeweils ein TD, das abhängig davon, ob JS verfügbar ist oder nicht, anders gestaltet ist.
MfG ChrisB
Ich hoffe ich habe mein Problem verständlich geschildert und jemand von euch kennt eine Möglichkeit es zu lösen.
inline-JS ist böse!
noscript ist meistens böse!
Und warum ersetzt du nicht einfach mittels JS den Inhalt einer Tabellenzelle?
<td id="someid">Noscript-Content</td>
js-file:
function init(){
// whatever precedes
document.getElementById('someid').innerHtml
= "Content for JS enabled Browser";
// whatever follows
}
window.onload= function(){
init();
};
~~~mfg Beat
--
><o(((°> ><o(((°>
<°)))o>< ><o(((°>o
Der Valigator leibt diese Fische
@@Beat:
nuqneH
inline-JS ist böse!
noscript ist meistens böse!
Und Inline-Style-Angaben sind auch immer böse! Und solche mit missbilligten Attributen wie @bgcolor erst recht!
Wie meist bietet es sich an, per JavaScript eine Klasse fürs 'body'-Element oder 'html'-Element zu setzen und per Nachfahrenselektor zu stylen:
<body>
<script type="text/javascript">document.body.className += " js";</script>
⋮
<td id="indicator"><span>nicht</span> erlaubt</td>
⋮
Im Stylesheet:
td { color: #FF0000 }
.js td { color: #00CC00 }
.js td span { display: none }
Unschön daran: wird JavaScript ausgeführt, CSS aber nicht beachtet, wird "nicht erlaubt" statt "erlaubt" angezeigt. Dann doch lieber so:
Und warum ersetzt du nicht einfach mittels JS den Inhalt einer Tabellenzelle?
⋮
Qapla'
Hallo Beat,
»»Und warum ersetzt du nicht einfach mittels JS den Inhalt einer Tabellenzelle?
Auf diese Idee bin ich leider, mangels JavaScript-Kentnisse, garnicht gekommen. (Bis auf den Browsercheck ließ sich momentan auch alles via PHP lösen)
<td id="someid">Noscript-Content</td>js-file:
function init(){
// whatever precedes
document.getElementById('someid').innerHtml
= "Content for JS enabled Browser";
// whatever follows
}window.onload= function(){
init();
};
Mhh, aber der Script ist dabei ja nicht in der Lage die Farbe der Spalte zu beeinflussen? ("Erlaubt" sollte ja grün hinterlegt sein.)
Vielen Dank für deine Antwort.
@@Nijin:
nuqneH
Mhh, aber der Script ist dabei ja nicht in der Lage die Farbe der Spalte zu beeinflussen? ("Erlaubt" sollte ja grün hinterlegt sein.)
Mhh, aber der Nijin ist dabei ja nicht in der Lage, gegebenen Antworten zu lesen? (Die passende sollte ja schon hinterlegt sein.)
Qapla'