CSSがこれを実行できないため、Stylishはこれを実行できません。 CSSには<input>
値の(疑似)セレクターがありません。見る:
:empty
セレクタは、唯一の子ノードではなく、入力値を指します。
[value=""]
動作します。ただし、初期状態のみ。これは、ノードのvalue
属性(CSSが認識する)がノードのvalue
プロパティと同じではないためです(ユーザーまたはDOM JavaScriptによって変更され、フォームデータとして送信されます)。
初期状態のみを気にしない限り、ユーザースクリプトまたは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";
}