2008-10-06 4 views
6

는 다음과 같은 코드를 생각해해제 앵커/사파리

$("a").attr("disabled", "disabled"); 

IE와 FF에서,이 앵커가 unclickable 할 것입니다,하지만 웹킷 기반 브라우저 (구글 크롬과 사파리)에서이 아무것도하지 않습니다. disabled 속성에 대한 좋은 점은 쉽게 제거되고 href 및 onclick 속성에 영향을 미치지 않는다는 것입니다.

원하는 결과를 얻는 방법에 대한 제안 사항이 있습니까? 응답은 다음과 같아야합니다 :

  • AJAX 호출이 실행되는 동안 양식 입력 컨트롤을 사용하지 않으려면 쉽게 되돌릴 수 있어야합니다.
  • 가 IE, FF, 및 웹킷

답변

7

에서 작동해야합니다 나는 당신이이 앵커 요소에 바인드 onclick 이벤트 핸들러가 있다고 가정합니다. 이벤트 처리기에서 "disabled"속성을 확인하고 이벤트가 설정되어 있으면 취소하십시오. 이벤트 처리기는 다음과 같습니다.

$("a").click(function(event){ 
    if (this.disabled) { 
    event.preventDefault(); 
    } else { 
    // make your AJAX call or whatever else you want 
    } 
}); 

스타일 시트 규칙을 설정하여 커서를 변경할 수도 있습니다.

a[disabled=disabled] { cursor: wait; } 

편집 - 설명에 제안 된대로 "비활성화 됨"확인이 단순화되었습니다.

+0

기능 diableForms을() { $ ("입력, 버튼, 텍스트 영역,에"). attr ("disabled", "disabled"). css ("cursor", "wait"); } function enableForms() { $ ("input, button, textarea, a"). not ("비활성화 됨"). removeAttr ("비활성화 됨") css ("커서", ""); } –

+0

방금 ​​사용하는 disableForms 및 enableForms 함수를 붙여 넣었습니다. 귀하의 제안에 감사드립니다. (== "장애인"this.disabled)이 빨리 될 경우 –

+0

는 – Sugendran

2

다른 조건 등에 따라이 속성을 사용하거나 사용하지 않도록 설정 한 앵커가 많은 사이트에서이 동작을 수정해야했습니다. 어쩌면 이상적이지는 않지만 그런 상황에서는 원치 않는 경우 개별적으로 각 앵커의 코드를 수정,이 모든 앵커에 대한 트릭을 할 것입니다 :

$('a').each(function() { 
    $(this).click(function (e) { 
     if ($(this).attr('disabled')) { 
      e.preventDefault(); 
      e.stopImmediatePropagation(); 
     } 
    }); 
    var events = $._data ? $._data(this, 'events') : $(this).data('events'); 
    events.click.splice(0, 0, events.click.pop()); 
}); 

과 :

a[disabled] { 
    color: gray; 
    text-decoration: none; 
} 
+0

와우. 이것은 환상적이며 대답으로 표시되어야합니다! 이게 어떻게 upvotes가 없습니까? 나는 실제로 당신이하고있는 일을하기 위해 현재의 대답을 수정하기 시작했다. 처음에는 0 upvote 대답을 읽지 않았다! 하지만 CSS 선택기를 [disabled = disabled]로 설정하지 않은 이유와 jQuery에서 동일한 선택기를 사용하지 않는 이유는 무엇입니까? –

+1

은 splice + pop 라인을 해독하는데 1 분이 걸렸습니다. 영리한. 사실, 마지막 요소를 삭제하는 동시에 스택의 맨 앞에 추가하는 방법을 좋아합니다. – beauXjames