2010-06-26 2 views
0

Я использую jQuery, чтобы показать и скрыть div, добавив/удалив класс.Добавить и удалить класс, чтобы make div отображался и скрывался

$('input').focus(function(){ 
    $(this).parents('.row').addClass("linksdiv"); 
}).blur(function(){ 
    $(this).parents('.row').removeClass("linksdiv"); 
}); 

Она работает довольно хорошо, когда фокусировка на входах, но если нажать на ссылку в linksdiv он теряет фокус и DIV исчезает. Было бы лучше использовать show() и hide() для linksdiv, чем зависеть от css?

Будет ли это позволять div быть кликабельным, когда входы сфокусированы? Или есть ли простая работа, чтобы поддерживать связь linksdiv от потери фокуса при нажатии, но все же он исчезает при размытии?

Еще раз спасибо! Вы, ребята, фантастичны!

Прошу прощения, я не мог описать очень хорошо, что я пытался сделать это, это http://jsfiddle.net/Zw5c2/5/ Спасибо Патрику за ресурс!

+0

Я не понимаю: вы скрываете строку, когда поле ввода теряет фокус ... Тогда как вы можете снова выбрать поле ввода? Я что-то упускаю? –

+0

Что делает ссылка? Нажатие на ссылку - * go *, чтобы запустить размытие, но может быть способ обмануть его в поведении (так сказать). Просто, возможно, немного разобраться в реальной ситуации. – user113716

+0

@Marcel - '.row div {display: none; } 'и' .row.linksdiv div {display: block; } 'например :) @Carter - вы не сможете сделать это с помощью« размытия », так как он скроет ребенка, а щелчок на якоре не произойдет ... есть ли альтернатива Вот? –

ответ

0

@Nick прав, не будет чистое решение.

Одна из возможностей заключается в том, чтобы задержать код в вашем размытии, чтобы обработчик кликов вашей ссылки имел возможность отправить фокус обратно на вход.

http://jsfiddle.net/Zw5c2/

var lastInput; 
var timeout; 
$('input').focus(function() { 
    var $th = $(this); 
    lastInput = $th; 
    clearTimeout(timeout); 
    $th.parents('.row').addClass("linksdiv"); 
}).blur(function() { 
    var $th = $(this); 
    timeout = setTimeout(function() { 
     lastInput = null; 
     $th.parents('.row').removeClass("linksdiv"); 
    }, 150); 
}); 

$('.link').click(function() { 
    lastInput.focus(); 
    // run your code for the link 
}); 

Другим решением может быть сделать так, что связь на самом деле вход. Просто настройте его, чтобы он выглядел как ссылка, и не допускал никаких изменений в тексте.

http://jsfiddle.net/Zw5c2/1/

Ни одно из решений является совершенным.

Изменения в реализации могут быть лучше.

+0

Я должен был быть более конкретным, это то, что я пытаюсь. http://jsfiddle.net/Zw5c2/5/ Скорее трудно объяснить. Ваше первое решение приблизилось, но у меня были проблемы с размытием. – CarterMan

+0

@CarterMan - Если вы просто хотите, чтобы у вас была возможность щелкнуть ссылку, вам все равно нужно отложить размытие. Я обновил ваш jsFiddle, чтобы добавить 'setTimeout'. Теперь вы можете щелкнуть ссылку. http://jsfiddle.net/Zw5c2/7 Но если он перенесет вас на другую страницу, я не понимаю, зачем вам нужно скрывать '.row'. Существуют разные подходы * в зависимости от того, что действительно должно делать ссылка *. – user113716

+0

Ссылка загружает либо страницу часто задаваемых вопросов, либо информацию, относящуюся к вводимому вводу. Строка класса hide необходима, поэтому не все поля в форме выделяются одновременно. Предполагается, что ссылка будет равна «target = _blank» – CarterMan

0

У меня не было бы размытия, связанного с входами. Размытие происходит по многим причинам и может быть нежелательным.

Если ваша цель состоит в том, чтобы просто выделить строку ввода для текущего активного поля, тогда я бы просто добавил логику в фокус, которая гарантирует, что только один div.row может иметь класс linksdiv за раз. В вашем случае:

$('input').focus(function() { 
    var containing_div = $(this).parents('.row'); 
    var current_div = $('div.row.linksdiv'); 

    if (current_div && current_div != containing_div) { 
    current_div.removeClass("linksdiv"); 
    } 
    else { 
    containing_div.addClass("linksdiv"); 
    } 
}); 
+0

Я думаю, что могу поймать дрейф, но у этого не было желаемого эффекта. Это то, что я делаю http://jsfiddle.net/Zw5c2/5/ – CarterMan

+0

Возможно, вы могли бы объяснить * желаемый эффект *. –

+0

Желаемый эффект будет то же самое, что и у меня в образце, за исключением того, что вы можете щелкнуть ссылку до того, как div исчезнет. – CarterMan