Я хочу иметь форму текстовой области, которая будет расширяться с 1 строки до 4 при фокусировке, а также отображает скрытую кнопку отправки - то же самое, что и сайт Twitter.
У меня есть рабочий сценарий, но проблема в том, что когда вы нажимаете кнопку отправки, она скрыта (фокус ушел), поэтому вы не можете отправить текст.
Здесь код (сценарий кофе - для рельсов)
$('.status-content').focus (event) ->
$(this).attr('rows', '4',)
$('.status-create').show()
$('.status-content').blur (event) ->
$(this).attr('rows', '1')
$('.status-create').hide()
.Status-content - это класс текстовой области, а.status-create - класс кнопки отправки.
Любые идеи о том, как скрыть кнопку, когда фокус выключен, но все же отправить текст?
Основываясь на совете Alex, я попытался добавить setTimeout:
$('.status-content').focus (event) ->
$(this).attr('rows', '4',)
$('.status-create').show()
$('.status-content').blur (event) ->
setTimeout ->
$(this).attr('rows', '1')
$('.status-create').hide()
, 100
Хотя я могу отправить сейчас, область текста остается в 4-х строках, когда фокус теряется.
Один из способов - проверить, не является ли текстовое поле пустым (нет сценария для кофе):
$('.status-content').blur(function(event) {
if ($(this).text().length) {
}
else {
$(this).attr('rows', '1');
$('.status-create').hide();
}
});
Или вы делаете небольшой трюк:
var timer;
$('.status-content').blur(function() {
clearTimeout(timer);
timer = setTimeout(function() {
$(this).attr('rows', '1');
$('.status-create').hide();
}, 100);
});
$('.status-create').click(function() {
clearTimeout(timer);
});
Просто исправьте свой код. Было бы разумнее иметь
$('.status-content').on 'focus', ->
$(this).attr('rows', '4',)
$('.status-create').show()
$('.status-content').on 'blur', ->
$(this).attr('rows', '1')
$('.status-create').hide()