2015-01-03 4 views
3

Я создаю библиотеку пользовательского интерфейса в JS, которая может, не полагаясь на любые таблицы стилей CSS, создавать компоненты пользовательского интерфейса, стилизованные из кода. До сих пор это было довольно просто, за исключением стилизации различных состояний управления (например, ввода: фокус один).Как установить ввод: стиль фокуса программно с использованием JavaScript

код, который я использую для создания поля ввода:

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?

Нет JQuery пожалуйста :-) Просто прямо JS.

Заранее благодарен!

ответ

2

Вам нужно будет добавить прослушиватель событий к элементу, чтобы изменить его стиль. Вот очень простой пример.

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

+2

Возможно, вы имели в виду: input.addEventListener? – Sinisa

+0

Возможно, я имел в виду, что: P –

+0

Спасибо. Оба предоставленные ответы (см. Ниже) дают решение, но я могу только принять его, и я решил пойти с вами, так как он избегает добавления CSS во время выполнения в заголовок. – Sinisa

2

Другой альтернативой было бы построить таблицу стилей для страницы.

Что-то вроде этого:

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 от сценариев и так лучшего обслуживания.

+0

Понял. Однако это означает, что он установлен для всех полей ввода, которые будут созданы? Есть ли способ сделать стиль для каждого поля ввода отдельно, если есть необходимость в разных стилях для каждого поля ввода? – Sinisa

+0

вы можете соответствующим образом изменить css. вы можете перейти по идентификатору элемента или классу – Karthik

+0

OK понял. Благодарю. И когда управление должно быть удалено из пользовательского интерфейса, как я могу удалить его стиль? Таким образом, он не будет накапливаться в голове. – Sinisa