มีสไตล์ไม่สามารถทำได้เพราะ CSS ไม่สามารถทำเช่นนี้ CSS ไม่มีตัวเลือก (หลอก) สำหรับ<input>
ค่า ดู:
:empty
เลือกหมายถึงเฉพาะโหนดลูกไม่ได้ค่าที่ป้อนเข้า
[value=""]
ไม่ทำงาน แต่สำหรับสถานะเริ่มต้นเท่านั้น นี่เป็นเพราะvalue
แอตทริบิวต์ของโหนด(CSS นั้นเห็น) ไม่เหมือนกับvalue
คุณสมบัติของโหนด(เปลี่ยนโดยผู้ใช้หรือจาวาสคริปต์ DOM และส่งเป็นข้อมูลแบบฟอร์ม)
หากคุณไม่สนใจสถานะเริ่มต้นเท่านั้นคุณต้องใช้สคริปต์ผู้ใช้หรือสคริปต์ Greasemonkey โชคดีที่มันไม่ยาก สคริปต์ต่อไปนี้จะทำงานใน Chrome หรือ Firefox ที่ติดตั้ง Greasemonkey หรือ Scriptish หรือในเบราว์เซอร์ที่รองรับ userscripts (เช่นเบราว์เซอร์ส่วนใหญ่ยกเว้น IE)
ดูการสาธิตของข้อ จำกัด ของวิธีการแก้ CSS บวกจาวาสคริปต์ที่ที่หน้า jsBin นี้
// ==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";
}