jeditable на этикетке, как я могу предотвратить потерю фокуса на клике? - PullRequest
2 голосов
/ 18 октября 2011

Я создаю простой скрипт, который позволяет пользователю динамически добавлять телефонные номера.Это входы в сочетании с метками, которые можно редактировать на лету.Я использую jeditable для меток, но затем я столкнулся с небольшой проблемой: если пользователь попытается щелкнуть внутри поля ввода метки, браузер обнаружит щелчок на метке и поместит фокус на элемент вводаатрибут «for» метки.

Я попробовал следующее:

$(selector).find('input').live('focus', function(){
    $(selector).click(function(e){
        e.preventDefault;
        return false;
    });
}).live('blur', function(){
    //somehow reattach the behaviour here?
});

По сути, «селектор» содержит селектор для моей jeditable метки.Я нахожу вход внутри него и на фокусе я отключил поведение метки по умолчанию.Это удерживает ярлык от изменения фокуса.Однако я не знаю, как отменить это.Я предположил, что мог бы установить логический флаг и затем вызвать отдельный метод, который предотвратил бы дефолт, но у меня есть ощущение, что для этого должен быть более чистый способ, какие-либо предложения?

1 Ответ

2 голосов
/ 18 октября 2011

Альтернативой является удаление атрибута for во время редактирования метки, а затем добавление этого атрибута после редактирования.

// store the "for" attr in the element's data
$('label').each(function() {
    $(this).data('for', $(this).attr('for'));
});

$('label').editable('...', {
    ...
    onreset: function() {
        var $label = $(this).parent();
        $label.attr('for', $label.data('for'));
    }
}).click(function() {
    $(this).removeAttr('for');
});

Посмотреть в действии: http://jsfiddle.net/G8QuA/.

...