是否可以通过CSS检测输入中是否包含文本?我试过使用:empty
伪类,并且试过使用[value=""]
,这两种都不起作用。我似乎找不到单个解决方案。
考虑到我们有:checked
和和的伪类,我想这一定是有可能的,:indeterminate
两者都是相似的。
请注意: 我这样做是为了实现“时尚”风格 ,无法使用JavaScript。
另请注意,在用户无法控制的页面上,客户端使用了时尚样式。
时尚 无法做到这一点,因为CSS无法做到这一点。 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";
}
问题内容: 警告:组件正在更改要控制的文本类型的不受控制的输入。输入元素不应从不受控制切换为受控制(反之亦然)。确定在组件的使用寿命中使用受控或非受控输入元素。* 以下是我的代码: 问题答案: 原因是,在您定义的状态下: 字段作为空白对象,因此在第一次渲染期间将是,输入字段的值将为: 因此,输入字段将变得不受控制。 在输入中输入任何值后,状态将变为: 那时输入字段被转换为受控组件;这就是为什么您得
我一直有这个错误:一个组件正在将受控输入的类型文本更改为不受控制。输入元件不应从受控切换到不受控(反之亦然)。决定在组件的生命周期内使用受控或不受控制的输入元件。当我尝试将值从数据库输入框点击编辑 这是我的代码:
我试图摆脱这个错误信息,但仍然没有成功。 还有Facebook页面的链接,但我仍然不知道该如何找到它。 在输入似乎总是一个非空值,我如何解决这个问题?
我试图更改Select input的值,然后在控制台中得到以下警告。 index.js:1446警告:一个组件正在将text类型的受控输入更改为不受控。输入元素不应从受控切换到非受控(或反之亦然)。决定在组件的生存期内使用受控还是不受控的输入元素。 但我只是以正确的方式更新状态,这是我的代码 有人能提出问题吗?