Onclick атрибут манипуляции в JavaScript? - PullRequest
0 голосов
/ 19 августа 2011

У меня есть поле ввода с предварительно определенным текстом, объясняющим, для чего оно. Если пользователь нажимает, он должен стать пустым, чтобы пользователь мог написать свой собственный. Но этого не должно произойти, если пользователь уже ввел пользовательский текст и по какой-то причине снова щелкает поле.

Первая часть работает, вторая - нет. Как мне настроить этот код?

 <input type="text" value="Write something..." firstclick=true
 onclick="if(this.getAttribute('firstclick')) {
 this.value='';this.setAttribute('firstclick',false);} ;"/>

Ответы [ 5 ]

2 голосов
/ 19 августа 2011

Как уже упоминалось, вы должны использовать атрибут заполнителя html5 с браузерами, которые его поддерживают.

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

<script>
function addPlaceHolder(elt, defaultText) {
    if("placeholder" in document.createElement("input"))
        elt.placeholder = defaultText;
    else 
    {
        var defaultValue = defaultText;
        elt.value = defaultText;
        elt.onfocus = function()
        {
            if(this.value === defaultValue)
            {
                this.value = '';
            }       
        }
        elt.onblur = function()
        {
            if(this.value === '')
            { 
                this.value = defaultValue;
            }
        }
    }
}
addPlaceHolder(document.getElementById('name'), 'defaultText');
</script>
2 голосов
/ 19 августа 2011
<input type="text" value="Write something..." 
onfocus="if(this.value=='Write something...'){ this.value='';}" 
onblur="if(this.value==''){this.value='Write something...';}">

Используйте вместо этого onfocus и onblur:)

2 голосов
/ 19 августа 2011

Вы, вероятно, хотите вместо этого onfocus, посмотрите на этот пример:

<input type="text" value="Name"
    onfocus="if(this.value === 'Name'){this.value = ''}" 
    onblur="if(this.value === ''){ this.value = 'Name'}" >

Если текущее значение в фокусе имеет значение «Имя», установите значение в ничего

Еслитекущее значение размытия не имеет значения, установите его в «Имя»

Лучшим способом сделать это было бы сделать функцию autoclear, чтобы вам не приходилось каждый раз вводить ее заново:

function autoClearField(domElement)
{
    var defaultValue = domElement.value;
    domElement.onfocus = function()
    {
        if(this.value === defaultValue)
        {
            this.value = '';
        }
    }

    domElement.onblur = function()
    {
        if(this.value === '')
        { 
            this.value = defaultValue;
        }
    }
}

А для HTML вы используете:

<input id='name' type="text" value="Name" >

При вызове такой функции устанавливается autoclear:

autoClearField(document.getElementById('name'));

Работающий jsFiddle

1 голос
/ 19 августа 2011

ну, я сделал это так:

firstclick='1' value="Antwort verfassen..." 
onfocus="if(this.getAttribute('firstclick')) {
    this.value='';this.removeAttribute('firstclick');
};"
1 голос
/ 19 августа 2011

У вас проблема с приведением строки "true" и "false" к bool.

Часы эта скрипка . Видимо в JS:

Boolean("false");  // == true
!! "false";        // == true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...