CSS がこれを行うことができないため、 Stylishはこれを行うことができません。CSS には、<input>
値の (疑似) セレクターがありません。見る:
:empty
セレクターは、入力値ではなく、子ノードのみを参照します。
[value=""]
動作します。ただし初期状態のみ。これは、ノードのvalue
属性(CSS が認識する) がノードのvalue
プロパティ(ユーザーまたは DOM JavaScript によって変更され、フォーム データとして送信される) と同じではないためです。
初期状態だけを気にする場合を除き、userscript または Greasemonkey スクリプトを使用する必要があります。 幸いなことに、これは難しくありません。次のスクリプトは Chrome、または Greasemonkey または Scriptish がインストールされた Firefox、またはユーザースクリプトをサポートする任意のブラウザー (IE を除くほとんどのブラウザー) で動作します。
この jsBin ページで、CSS と JavaScript ソリューションの制限のデモを参照してください。
// ==UserScript==
// @name _Dynamically style inputs based on whether they are blank.
// @include http://YOUR_SERVER.COM/YOUR_PATH/*
// @grant GM_addStyle
// ==/UserScript==
/*- The @grant directive is needed to work around a design change
introduced in GM 1.0. It restores the sandbox.
*/
var inpsToMonitor = document.querySelectorAll (
"form[name='JustCSS'] input[name^='inp']"
);
for (var J = inpsToMonitor.length - 1; J >= 0; --J) {
inpsToMonitor[J].addEventListener ("change", adjustStyling, false);
inpsToMonitor[J].addEventListener ("keyup", adjustStyling, false);
inpsToMonitor[J].addEventListener ("focus", adjustStyling, false);
inpsToMonitor[J].addEventListener ("blur", adjustStyling, false);
inpsToMonitor[J].addEventListener ("mousedown", adjustStyling, false);
//-- Initial update. note that IE support is NOT needed.
var evt = document.createEvent ("HTMLEvents");
evt.initEvent ("change", false, true);
inpsToMonitor[J].dispatchEvent (evt);
}
function adjustStyling (zEvent) {
var inpVal = zEvent.target.value;
if (inpVal && inpVal.replace (/^\s+|\s+$/g, "") )
zEvent.target.style.background = "lime";
else
zEvent.target.style.background = "inherit";
}