2014-12-05 1 views
0

Ниже вы увидите код, над которым я работаю, и включенный JSFiddle.Фокус работает до щелчка/изменения переключателя. Можно ли запустить клик/изменение перед фокусом?

Выпуск:

  1. Фокус работает до щелчка/изменения поэтому запас двигается до кнопки радио может быть выбрана.

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

http://jsfiddle.net/nLgqhqwc/6/

HTML

<div class="panel"> 
    <input type="text"/> 
</div> 

<div class="panel"> 
    <input type="text"/> 
</div> 

<div class="panel"> 
    <select> 
     <option>option</option> 
    </select> 
</div> 

<div class="panel"> 
    <input type="radio"/> 
</div> 

<div class="panel"> 
    <input type="checkbox"/> 
</div> 

CSS

.panel{ 
    padding:15px; 
    background:grey; 
    margin-bottom:15px; 
} 

.panel-primary{ 
    margin:0 15px 0 15px; 
    background:blue; 
    margin-bottom:15px; 
} 

JQuery

$(document).ready(function() { 

    $('.panel').click(function() { 
     event.stopPropagation(); 
     $('.panel').removeClass('panel-primary'); 
     $(this).addClass('panel-primary'); 
    }); 

    $('input, select').bind('focus blur', function (event) { 
     event.stopPropagation(); 
     $('.panel').removeClass('panel-primary'); 
     $(this).closest(".panel").addClass('panel-primary'); 
    }); 

    $('input[type=radio]').change(function() { 
     event.stopPropagation(); 
     $('.panel').removeClass('panel-primary mrgn-lft-lg'); 
     $(this).closest(".panel").addClass('panel-primary'); 
    }); 

}); 
+0

Почему бы вам не влиять на 'hover' вместо' focus'? Вам не нужен jquery, потому что будет достаточно чистого css. Просто замените '.panel-primary' в вашем css' .panel: hover'. –

+0

Нужно работать с помощью клавиши TAB. – user262430

+0

ОК, я думаю, что это то, что вы хотите: http://jsfiddle.net/nLgqhqwc/10/ Смотрите скрипку и расскажите, работает ли она так, как хотелось бы. –

ответ

0

Вы можете просто сгореть случай, когда пользователь переходит в .panel. Для этого нужно заменить щелчок:

$('.panel').click(function() { 

с click OR hover with the mouse. Вот так:

$('.panel').on('click mouseover',function() { 

А вот пример скрипку: http://jsfiddle.net/nLgqhqwc/10/

Другой способ

Когда не сфокусирован, сделать отступы шире. Таким образом, с содержанием в .panel»не будет двигаться (и пользователь может щелкнуть его легко), и запас будет по-прежнему существует:

.panel{ 
    padding:15px 30px; 
} 

.panel-primary { 
    margin:0 15px 0 15px; 
    padding: 15px; 
} 

Ссылка: http://jsfiddle.net/nLgqhqwc/11/

+0

Спасибо, но я ищу решение, которое работает только с щелчком мыши, а не щелчком мыши. Очень ценю помощь, хотя :) – user262430

+0

Отличная идея, но я боюсь, что это нужно сделать с пометкой, и радио/флажки будут двигаться. – user262430

+0

Отредактированный ответ с другим, также работающим способом. –

0

Вы должны слушать события нажатия на захват фазы , Вы можете сделать:

document.querySelector('.panel').addEventListener('click', doSomething, true);

Посмотрите here понять разницу захвата и фазы восходящей цепочки.

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

Не все поддерживают браузеры перехвате событий (например, Internet Explorer, версии менее 9 нет), но все поддерживают событие бульканье, поэтому это фаза используется для привязки обработчиков событий к в все абстракции в браузере, включены jQuery. jQuery equivalent of JavaScript's addEventListener method

Таким образом, вы не должны касаться о порядке событий. Вы можете решить simple.

+0

Спасибо за ответ. В примере, который вы указали, класс не добавляется, когда я перехожу к переключателям. – user262430

Смежные вопросы