#javascript #jquery
#javascript #jquery
Вопрос:
При нажатии на мое контекстное меню (щелкните правой кнопкой мыши пользовательское меню) у меня установлено несколько вариантов. Приведенный ниже фрагмент предназначен для переименования папки ( li > a
значение меню), который скрывает ссылку внутри <li>...</li>
и добавляет поле ввода.
$(document).ready(function() {
"use strict";
$(document).on('mousedown', function(e) {
if ($(e.target).parent().hasClass('custom-menu')) {
switch (action) {
case 'rename-folder':
anchor = clicked.find('a').first();
anchor.before($('<input />', {
type: 'text',
value: $(anchor).text(),
'class': 'FolderRenaming',
focusout: function() {
$(this).siblings('a').html($(this).val()).show();
$(this).remove();
$(anchor).parent().removeClass('clicked');
}
})).hide();
break;
}
}
}).on('keyup', 'input.rename', function(e) {
e.preventDefault();
if (e.keyCode === 13) {
$(e.target).focusout();
}
});
});
Вы щелкаете правой кнопкой мыши и выбираете опцию «переименовать». Затем вы должны щелкнуть внутри этого поля ввода и либо нажать enter, либо за пределами поля, чтобы произошло обратное.
Как я могу сделать так, чтобы при нажатии на переименование текст в добавленном <input>
выделялся и, следовательно, фокусировался в?
Ответ №1:
Для достижения этой цели вы можете использовать функцию jQuery focus()
для элемента.
Изменив свой before()
вызов на insertBefore()
call, вы можете привязать focus()
метод к добавляемому элементу.
case 'rename-folder':
anchor = clicked.find('a').first().hide();
$('<input />', {
type: 'text',
value: $(anchor).text(),
'class': 'FolderRenaming',
focusout: function() {
$(this).siblings('a').html($(this).val()).show();
$(this).remove();
$(anchor).parent().removeClass('clicked');
}
}).insertBefore(anchor).focus();
break;
Я не тестировал вышесказанное, поскольку ваш код был всего лишь фрагментом, но создал базовую реализацию вышеупомянутого здесь:
https://jsfiddle.net/michaelvinall/w6q09rzs/1 /
Комментарии:
1. Ваша скрипка работает хорошо, однако при попытке реализовать это в моем скрипте ничего не происходит. Я попытался создать фрагмент моего кода, однако, похоже, мне нужно было бы много раскошелиться, тогда как в StackOverflow людям просто нравятся небольшие разделы для работы.
2. Я только что обновил свой вопрос, добавив немного больше скрипта. В нем не так уж много всего, просто много css и еще много чего, чтобы попытаться заставить его работать с try-me-snippet.
3. Спасибо, ваша проблема, похоже, в том, что вы используете событие mousedown вместо click.