स्टाइलिश ऐसा नहीं कर सकता क्योंकि CSS ऐसा नहीं कर सकता। CSS में <input>
value (s) के लिए कोई (छद्म) चयनकर्ता नहीं हैं । देख:
:empty
चयनकर्ता इकलौती संतान नोड्स, नहीं इनपुट मानों को दर्शाता है। काम
[value=""]
करता है ; लेकिन केवल प्रारंभिक अवस्था के लिए। ऐसा इसलिए है क्योंकि नोड का value
गुण (जो CSS देखता है), नोड की value
संपत्ति (उपयोगकर्ता या DOM जावास्क्रिप्ट द्वारा परिवर्तित, और प्रपत्र डेटा के रूप में प्रस्तुत) के समान नहीं है।
जब तक आप केवल प्रारंभिक स्थिति के बारे में परवाह नहीं करते हैं, तो आपको एक उपयोगकर्ता नाम या Greasemonkey स्क्रिप्ट का उपयोग करना चाहिए । सौभाग्य से यह कठिन नहीं है। निम्न स्क्रिप्ट क्रोम में काम करेगी, या फ़ायरफ़ॉक्स के साथ Greasemonkey या स्क्रिप्टिश स्थापित, या किसी भी ब्राउज़र में जो IE (को छोड़कर, ज्यादातर उपयोगकर्ताओं को समर्थन करता है)।
इस jsBin पृष्ठ पर CSS प्लस के जावास्क्रिप्ट सॉल्यूशन की सीमाओं का डेमो देखें ।
// ==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";
}