Şık bunu yapamaz çünkü CSS bunu yapamaz. CSS'de <input>
değer (ler) için hiç (sahte) seçici yoktur . Görmek:
:empty
Seçici tek çocuk düğümleri değil, girdi değerleri belirtmektedir.
[value=""]
does işi; ama sadece başlangıç durumu için. Bunun nedeni, bir düğümün value
özniteliğinin (CSS'nin gördüğü), düğümün value
özelliğiyle aynı olmamasıdır (Kullanıcı veya DOM javascript tarafından değiştirilir ve form verileri olarak gönderilir).
Yalnızca başlangıç durumuna umurumda sürece, sen gerekir Bir userscript veya Greasemonkey komut dosyasını kullanın. Neyse ki bu zor değil. Aşağıdaki komut dosyası Chrome'da veya Greasemonkey veya Scriptish'in yüklü olduğu Firefox'ta veya kullanıcı metinlerini destekleyen herhangi bir tarayıcıda (IE hariç çoğu tarayıcıda) çalışır.
Bu jsBin sayfasında CSS sınırlarının artı javascript çözümünün demosuna bakın .
// ==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";
}