3

Я почесываю голову со вчерашнего дня по этой проблеме, которую я не могу решить. Я новый стартер для Twitter Bootstrap, и все прошло хорошо до вчерашнего дня.Щебетать теги бутстрапа не удаляют местозаполнителя, когда onfocus

Я использую последние JQuery v1.11.1 и Twitter Bootstrap v3.3.1. Вчера я загрузил Bootstrap Tags Input, отсюда: http://timschlechter.github.io/bootstrap-tagsinput/examples/

Плагин работает, и я изменил стили CSS в соответствии с макетом страницы, но проблема, с которой я столкнулась, заключается в том, что атрибут placeholder не исчезнет при фокусировке. Если я наберу тег и добавлю значение запятой, то заполнитель будет отображаться до тех пор, пока я не начну печатать, а затем снова исчезнет.

Я попытался использовать функцию JQuery onfocus, чтобы удалить атрибут при onfocus, но он ничего не делает. То, что я хочу достичь, - это то, что при фокусировке заполнитель не показывает в этот момент даже не размытие.

Мой поле ввода демонстрируется ниже:

<input type="text" name="customer_tags" id="customer_tags" value="" placeholder="Enter you tags" data-role="tagsinput" required />

+0

Какой браузер вы видите в этом месте? – haxtbh

+0

Можете ли вы дать ссылку или jsbin/codepen и т. Д.? «пока я не начну печатать», звучит как его действие, как должно. – atmd

+0

Привет, это Firefox 34.0.5, которая является последней версией – Cam

ответ

2

HTML5 placeholder атрибут не исчезнет, ​​когда вы сосредоточены на input тег ... она исчезнет только тогда, когда вы начнете печатать. Это поведение по умолчанию.

Вы можете видеть это @W3Schools, а ...

+2

Я бы предложил документы MDN на входах (включая заполнители), а не w3schools https://developer.mozilla.org/en-US/docs/Web/HTML/Element/Input – atmd

+0

Привет, спасибо за ответ, и я это понимаю но поведение не одно и то же. Заполнитель будет отображаться после запятой, пока вы не начнете печатать снова. Я организую ссылку на мой код, только что со мной – Cam

0

Попробуйте это, я надеюсь, что это работает:

<form> 
    <div> 
    <label for="name" class="left-label">Your Name</label> 
    <input type="text" class="example-two" placeholder="Enter you tags" id="name" name="name"> 
    </div> 
</form> 

CSS:

[placeholder]:focus::-webkit-input-placeholder { 
    transition: opacity 0.5s 0.5s ease; 
    opacity: 0; 
} 

.example-two:focus::-webkit-input-placeholder { 
    transition: text-indent 0.5s 0.5s ease; 
    text-indent: -100%; 
    opacity: 1; 
} 

body { 

} 
form { 
    display: inline-block; 
    margin-top: 20px; 
} 
label { 
    display: block; 
    text-align: left; 
    font: bold 0.8em Sans-Serif; 
    text-transform: uppercase; 
} 
.left-label { 
    float: left; 
    padding: 8px 5px 0 0; 
} 
input[type=text] { 
    padding: 5px; 
    text-indent: 0; 
} 
form div { 
    margin: 20px; 
    clear: both; 
    text-align: left; 
} 

JSFiddle

EDIT: Работа над IE тоже: JSFiddle

+0

Привет @ Joci93 вот ссылка на мой код http://brightlet.kollkolen.com/tagsinput.html, как вы можете видеть при вводе запятой, который снова появляется заполнитель. – Cam

+0

@Cam Попытка: Немного bugy, но работает – Joci93

+0

Спасибо, но он не работает. Попробуйте добавить атрибут data-role =" taginput "во вход, так как ему нужно работать с Bootstrap Tags Входной плагин – Cam

0

Так работает плагин. Как только вы нажмете «enter» или «comma», он создаст тег span (см. Прикрепленное изображение) и сдвиньте вход вправо. Итак, теперь вход не имеет значения и должен показывать местозаполнитель.

enter image description here

In their docs it's mentioned [Поиск confirmKeys]

массив, который коды клавиш добавить тег при вводе текста в поле ввода. (по умолчанию: [13, 188], которые ENTER и запятой)

Измените confirmkeys удалить создание тегов, когда вы печатаете comma

Edit:

На вашем site I попробовал метод ниже в консоли, и он сработал.

$('input').tagsinput({ 
    confirmKeys: [13] 
}); 

enter image description here

+0

Привет, я пробовал это, но даже после ввода запятая она все равно делает то же самое :( – Cam

+0

На вашем сайте в консоли я попробовал этот '$ ('input'). taginput ({confirmKeys: [13]});' в консоли и он работал. это? – anpsmn

3

два года спустя, но я нашел, как обойти эту проблему. Во-первых, если вы проверите DOM, вы увидите новый текст ввода, который наследует наш текст-заполнитель, но без дополнительной функции onblur, в фокусе, о которой все упоминают раньше.

<div class="bootstrap-tagsinput"> 
<input placeholder="text inherited from our input" size="23" type="text"> 
</div> 

Затем, чтобы исправить эту проблему, вам нужно было создать функцию jquery для указания этого ввода. Как это:

$('.bootstrap-tagsinput input').blur(function(){jQuery(this).attr('placeholder', '')}) 

, указывающий на элемент с классом «самозагрузки-tagsinput», а затем «входные» объекты внутри. Вы также можете добавить функцию .focus, если хотите. В моем случае, работает, когда пользователь покидает объект, а теги ввода выглядят чистыми без заполнителя.

0

Я смог быстро исправить использование jquery. Поведение, которое я хотел, должно делать две вещи:

1) Удалите местозаполнитель на странице после того, как я сосредоточился и начал печатать. Поэтому я запустил его на клавиатуре.

$(document).on('keyup', '.bootstrap-tagsinput input', function(){ 
    $(this).attr('placeholder', '') 
}) 

2) Если на входе уже имеются метки, тогда мне явно не нужен заполнитель. Я запускаю это при загрузке страницы.

$('.labels').each(function(){ 
    var len = $(this).tagsinput('items'); 
    if(len){ 
     var $input = $($(this).prev().children('input').get(0)); 
     $input.attr('placeholder', ''); 
    } 
}) 
0

Следующий код работает в моем случае:

<input type="text" name="add_image_tags" id="add_image_tags" data-role="tagsinput" 
class="form-control" placeholder="Enter tags" data-placeholder="Enter tags" value="" /> 

handlePlaceHolder(); //Call during page load 

function handlePlaceHolder() 
{  
    if($('#add_image_tags').val()) 
    { 
     $('.bootstrap-tagsinput input').attr('placeholder', ''); 
    } 
    else 
    { 
     $('.bootstrap-tagsinput input').attr('placeholder',$('#add_image_tags').attr('data-placeholder')); 
    } 
} 

$('#add_image_tags').on('itemRemoved', function(event) { 
    // event.item: contains the item 
    handlePlaceHolder(); 
}); 

$('#add_image_tags').on('itemAdded', function(event) { 
    // event.item: contains the item 
    handlePlaceHolder(); 
}); 
0

В моем случае, после небольшой модификации, он отлично работает.

$('#txtTimeSlot').on('change', function() { 
     var len = $(this).tagsinput('items').length; 
     if (len > 0) { 

      var $input = $($(this).prev().children('input').get(0)); 
      $input.attr('placeholder', ''); 
     } else { 

      var $input = $($(this).prev().children('input').get(0)); 
      $input.attr('placeholder', $(this).attr('placeholder')); 
     } 
    });