У меня есть несколько текстовых полей, которые могут автоматически заполняться данными, и я использую функцию javascript, чтобы очистить текстовое поле один раз, а затем вернуться к функции javascript, которая очищается только при вводе определенного текста ,Javascript: с программным изменением функции onfocus
Например: текстовое поле со стандартным вводом как «АДРЕС» будет автоматически заполнено «ABC123», а затем очищено. Если текстовое поле остается пустым, тогда он будет возвращен в «АДРЕС»
Это похоже на вопрос на Change an element's onfocus handler with Javascript?, но я не мог заставить его работать. Какие-либо предложения?
Мои текстовые поля просто ASP.NET текстовые поля и OnFocus/ONBLUR события устанавливаются в коде позади:
<asp:TextBox ID="txtAddress" Text="ADDRESS" runat="server" CssClass="txtboxwrong" />
Код За:
txtAddress.Attributes.Add("onFocus", "clearOnce(this,'ADDRESS');")
txtAddress.Attributes.Add("onBlur", "restoreText(this,'ADDRESS');")
Мой Javascript выглядит следующим образом:
function clearText(obj, deftext, defclass, defvalue) {
if (obj.value == deftext) {
if (!defvalue) { defvalue = '' }
obj.value = defvalue;
if (!defclass) { defclass = 'txtbox' }
obj.className = defclass;
}
};
function restoreText(obj, deftext, defclass, defvalue) {
if (!defvalue) { defvalue = '' }
if (obj.value == defvalue || obj.value == '') {
obj.value = deftext;
if (!defclass) { defclass = 'txtboxwrong' }
obj.className = defclass;
}
};
function clearOnce(obj, deftext) {
obj.value = '';
obj.className = 'txtbox';
obj.onfocus = function() { clearText(obj, deftext); };
};
EDIT:
Благодаря @rescuecreative, я исправил пробную версию. Возвращая изменение onfocus в clearOnce, он устанавливает onfocus элемента в правильную функцию и работает правильно! Изменить ниже:
function clearOnce(obj, deftext) {
obj.value = '';
obj.className = 'txtbox';
return function() { clearText(obj, deftext); };
};
Я сейчас поиграю с ним, но есть ли быстрое исправление для кода, который я уже написал? – JacobD
@JUSTAGuyIKnow Конечно. Я не парень ASP, но мне кажется, что ваша функция clearOnce вызывается каждый раз, когда поле фокусируется. Это означает, что все, что он делает, сбрасывает свойство onfocus элемента каждый раз, когда оно вызывается. Фактически, перезаписывая свойство onfocus элемента, вы, вероятно, уничтожаете способность ASP взаимодействовать с событием фокуса.Поэтому вместо изменения свойства onfocus в конце clearOnce попробуйте ВОЗВРАТИТЬ функцию, которая вызывает clearText. – rescuecreative
ОН МОЙ ГЛОБ ЭТО РАБОТАЕТ! Спасибо @rescuecreative! Я отправлю ответ и объясню его с вашей помощью. – JacobD