css 如何使用JavaScript编程设置input:focus样式

mlnl4t2r  于 2023-01-03  发布在  Java
关注(0)|答案(6)|浏览(194)

我正在用JS构建一个UI库,它可以不依赖任何CSS样式表,创建UI组件,从代码中样式化。到目前为止,这相当容易,除了样式化不同的控件状态(如input:focus one)。
用于创建输入字段的代码:

function newInput()
{
    var ctr = docmuent.createElement("input");
    ctr.setAttribute("type","text");
    ctr.setAttribute("value", some-default-value);
    ctr.style.fontFamily = "sans-serif,helvetica,verdana";
    /* some font setup here, like color, bold etc... */
    ctr.style.width = "256px";
    ctr.style.height = "32px";
    return ctr;
}

为默认状态设置样式很容易。但是我不确定如何为状态设置样式,如聚焦、禁用或不可编辑。
如果我有CSS样式表包括在项目中,将很容易排序。但我不能有任何CSS文件包括在内,它必须是纯JS。
有人知道如何直接从JS代码中设置输入字段状态(例如input:focus)的样式吗?

    • 没有JQuery**请:-)只是简单的JS。

先谢了!

hgqdbh6s

hgqdbh6s1#

你需要给元素添加一个事件监听器来改变它的样式,下面是一个非常基本的例子。

var input = document.getElementById("something");
input.addEventListener("focus", function () {
  this.style.backgroundColor = "red";  
});
<input type="text" id="something" />
xiozqbni

xiozqbni2#

另一种方法是为页面构建样式表。
大概是这样的

var styles='input:focus {background-color:red}';

 var styleTag=document.createElement('style');
 if (styleTag.styleSheet)
     styleTag.styleSheet.cssText=styles;
 else 
     styleTag.appendChild(document.createTextNode(styles));

 document.getElementsByTagName('head')[0].appendChild(styleTag);

这样你就可以把css样式和脚本完全分离,从而得到更好的维护。

vof42yt1

vof42yt13#

尽可能使用CSS变量

现在是2022年,对于这个问题,有比到处添加事件侦听器更简单的解决方案,这些侦听器可能永远不会被清理干净。
相反,如果您可以控制CSS,只需在CSS中执行以下操作:

.my-class {
  --focusHeight: 32px;
  --focusWidth: 256px;
}

.my-class:focus {
  height: var(--focusHeight);
  width: var(--focusWidth);
}

在JavaScript中,只需使用setProperty更新变量即可:

const el = document.getElementById('elementId');
el.style.setProperty('--focusHeight', newFocusHeight);
el.style.setProperty('--focusWidth', newFocusWidth);
vd8tlhqk

vd8tlhqk4#

首先,创建输入:

<input type="text" id="myElementID" />

然后添加以下javascript:

const element = document.getElementById("myElementID");

// Add a box shadow on focus
element.addEventListener("focus", (e) => {
  e.target.style.boxShadow = "0 0 0 3px #006bff40";
});

// Remove the box shadow when the user doesn't focus anymore
element.addEventListener("blur", (e) => {
  e.target.style.boxShadow = "";
});
qnakjoqk

qnakjoqk5#

一个快速的oneliner,它动态地将一个style标记附加到正文。

document.body.innerHTML += '<style>#foo:focus {background-color:gold}</style>'
<input id="foo"/>
niknxzdl

niknxzdl6#

let input = document.querySelector(".input-text");
    let label = document.querySelector('.fields-label');
    input.addEventListener('focus', function(e){
        label.classList.add('is-active');
    })
    input.addEventListener('blur', function(e){
        if(input.value === "") {
            label.classList.remove('is-active');
        }
    })
label.is-active{
            color:red;
        }
<div class="input-fields">
        <label class="fields-label">Last Name</label>
        <input type="text" class="input-text">
    </div>

相关问题