Bootstrap 3으로 버튼이 눌리지 않게하는 방법


79

Bootstrap 3의 버튼을 클릭 한 후 자동으로 해제하려면 어떻게해야합니까?

내 문제를 재현하려면 몇 가지 버튼이있는 페이지를 만들고 적절한 부트 스트랩 클래스를 제공하고 부트 스트랩을 포함합니다.

<input id="one" type="button" class="btn btn-default" value="one">
<input id="two" type="button" class="btn btn-primary" value="two">

페이지를로드하고 버튼 중 하나를 클릭합니다. 페이지의 다른 곳을 클릭 할 때까지 (FF29 및 chrome35beta 사용) 우울하고 강조 표시됩니다.

클릭하고 클릭하지 않은 상태에서 입력 요소를 검사하면 추가 클래스가 연결 및 제거되는 것을 표시하지 않습니다.

다음은 부트 스트랩 버튼이 눌려있는 예입니다. http://jsfiddle.net/52VtD/5166/

답변:


100

귀하의 예에서 버튼은 계속 눌려 있지 않습니다. 그들은 집중을 유지 합니다. 차이점을 확인하려면 다음을 수행하십시오.

  1. 버튼을 클릭하고 있습니다.
  2. 해제. 마우스를 놓으면 더 이상 눌리지 않기 때문에 버튼의 모양이 약간 변경되는 것을 볼 수 있습니다.

버튼을 놓은 후에도 버튼의 포커스를 유지하지 않으려면 마우스를 놓을 때마다 브라우저에서 포커스를 빼도록 지시 할 수 있습니다.

이 예제에서는 jQuery를 사용하지만 바닐라 JavaScript로 동일한 효과를 얻을 수 있습니다.

$(".btn").mouseup(function(){
    $(this).blur();
})

깡깡이


25

또는 정확히 동일한 스타일을 지정할 수있는 앵커 태그를 사용할 수 있지만 양식 요소가 아니기 때문에 포커스를 유지하지 않습니다.

<a href="#" role="button" class="btn btn-default">one</a>.

여기에서 앵커 요소 섹션을 참조하십시오. http://getbootstrap.com/css/#buttons


blur () 메서드보다 더 나은 솔루션이라고 생각합니다. 많은 브라우저에서 원치 않는 blur () 메서드를 사용하여 포커스 스타일의 플래시가 나타납니다. 한 가지 생각은 빈 fragid를 가리키는 앵커 대신 <span> 요소를 사용하는 것입니다. 이로 인해 스크롤이 맨 위로 이동할 수 있기 때문입니다. 세 가지를 비교 하는 바이올린이 있습니다.
David K.

14
이 방법은 나를 위해 작동하지 않았습니다. 난 여전히 앵커 태그를 사용하여 초점을 맞춘 버튼 요소를 얻고있다
하인릭

7
현재 크롬과 파이어 폭스의 빠른 테스트 는 href ( ) 없이 앵커 태그에서 작동 <a role="button" class="btn btn-default">yada</a>하지만 href가있는 경우 선택된 상태로 남아 있음을 보여줍니다 (@ jme11 예제에 따라). 나는 href가없는 앵커가 유효하지 않다고 생각했을 것입니다. 그러나 크롬과 파이어 폭스의 일관성 때문에 매력적입니다. 그리고 href없이 IE11에서도 작동합니다.
Typhlosaurus

1
@Typhlosaurus : href-less 앵커 태그는 유효한 HTML 5 : " a요소에 href속성 이없는 경우 요소는 링크가 배치되었을 수있는 자리 표시자를 나타냅니다" ( W3C HTML 5 사양 ). 이 접근 방식은 빈 fragid에 연결할 수있는 잠재적 인 부작용없이 잘 작동했습니다.
Daniel Saner

11

버튼에 초점이 맞춰져 있습니다. 이를 효율적으로 제거하기 위해이 쿼리 코드를 프로젝트에 추가 할 수 있습니다.

$(document).ready(function () {
  $(".btn").click(function(event) {
    // Removes focus of the button.
    $(this).blur();
  });
});

이것은 앵커 링크에서도 작동합니다.

$(document).ready(function () {
  $(".navbar-nav li a").click(function(event) {
    // Removes focus of the anchor link.
    $(this).blur();
  });
});

이 답변 eventclick(function()).
Diaa

9

내 선호 :

<button onmousedown="event.preventDefault()" class="btn">Calculate</button>

8

또는 각도 방법 :

function blurElemDirective() {
  return {
    restrict: 'E',
    link: function (scope, element, attrs) {
      element.bind('click', function () {
        element.blur();
      });
    }
  };
}

app.directive('button', blurElemDirective);
app.directive('_MORE_ELEMENT_', blurElemDirective);

_MORE_ELEMENT_ 를 다른 요소로 바꿉니다 .

또는 속성 방식 :

function blurElemDirective() {
  return {
    restrict: 'A',
    link: function (scope, element, attrs) {
      element.bind('click', function () {
        element.blur();
      });
    }
  };
}

app.directive('blurMe', blurElemDirective);

그런 다음 html 요소에 속성을 추가하십시오. blur-me

<button blur-me></button>

1
이것은 나를 올바른 방향으로 이끌었지만 다음과 같은 오류를 던졌습니다. element.blur() is not a function그래서 저도 그렇게했습니다event.target.blur()
thatandrey

지시문이 파괴되면 해당 리스너의 바인딩을 해제하는 것을 잊지 마십시오!
Peter Kirby

@PeterKirby, html 노드에 직접 바인딩하면 자동으로 파괴되지 않습니까?
Stalinko

3

양식 요소 ( input) 이기 때문에 브라우저의 초점 입니다. 약간의 CSS로 쉽게 초점을 제거 할 수 있습니다.

input:focus {
    outline: 0;
}

다음은 귀하의 예가 담긴 바이올린입니다. http://jsfiddle.net/52VtD/5167/

편집하다

아, 방금 버튼 자체의 색상도 변하는 것을 보았습니다. 부트 스트랩 btn-default은이 CSS로 버튼 의 버튼을 변경합니다 .

.btn-default:focus {
    color: #333;
    background-color: #ebebeb;
    border-color: #adadad;
}

이 동작을 원하지 않으면 CSS로 덮어 쓰십시오.


1

이것은 :active:focus요소 상태 와 관련이 있습니다 . 이러한 버튼의 상태에 대한 스타일을 수정해야합니다. 예를 들어 기본 버튼의 경우 :

.btn-default:focus, .btn-default:active, .btn-default.active, .open .dropdown-toggle.btn-default {
    color: #333;
    background-color: #ccc;
    border-color: #fff;
}
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.