비활성화된 입력에 대한 이벤트
장애인이 된 것 같습니다.<input>
어떤 이벤트에서도 처리되지 않습니다.
이 문제를 해결할 방법이 있습니까?
<input type="text" disabled="disabled" name="test" value="test" />
$(':input').click(function () {
$(this).removeAttr('disabled');
})
여기서 입력을 클릭하여 활성화해야 합니다.하지만 활성화하지 않으면 입력이 게시되지 않습니다.
비활성화된 요소는 마우스 이벤트를 발생시키지 않습니다.대부분의 브라우저는 비활성화된 요소에서 발생한 이벤트를 DOM 트리로 전파하므로 이벤트 핸들러는 컨테이너 요소에 배치될 수 있습니다.그러나 Firefox에서는 이 동작이 나타나지 않습니다.사용자가 비활성화된 요소를 클릭해도 전혀 동작하지 않습니다.
더 나은 솔루션은 생각할 수 없지만 브라우저 간 완벽한 호환성을 위해 비활성화된 입력 앞에 요소를 배치하고 해당 요소의 클릭을 확인할 수 있습니다.다음은 예를 제시하겠습니다.
<div style="display:inline-block; position:relative;">
<input type="text" disabled />
<div style="position:absolute; left:0; right:0; top:0; bottom:0;"></div>
</div>
jq:
$("div > div").click(function (evt) {
$(this).hide().prev("input[disabled]").prop("disabled", false).focus();
});
예: http://jsfiddle.net/RXqAm/170/ (jQuery 1.7을 사용하는 경우 필요 없음)prop
대신attr
).
비활성화된 요소는 일부 브라우저에서 클릭을 "먹음"으로 하며, 이러한 요소에 응답하지 않으며 요소 또는 컨테이너의 이벤트 핸들러에 의해 캡처될 수 없습니다.
IMHO에서 이것을 「수정」하는 가장 간단하고 깨끗한 방법(실제로 OP와 같이 비활성화된 요소의 클릭을 캡처할 필요가 있는 경우)은, 다음의 CSS를 페이지에 추가하는 것 뿐입니다.
input[disabled] {pointer-events:none}
이렇게 하면 비활성화된 입력에 대한 클릭이 부모 요소에 전달되어 정상적으로 캡처할 수 있습니다. (비활성화된 입력이 여러 개 있는 경우 각 입력이 아직 배치되지 않은 경우 개별 컨테이너에 저장할 수 있습니다. 추가 정보<span>
또는<div>
, say - 어떤 비활성화된 입력이 클릭되었는지 쉽게 구분할 수 있도록 합니다).
단점은 유감스럽게도 이 트릭은 이 기능을 지원하지 않는 오래된 브라우저에서는 작동하지 않습니다.pointer-events
CSS 속성(IE 11, FF v3.6, Chrome v4에서 동작해야 함): caniuse.com/ #search=setc-displays
오래된 브라우저를 지원하려면 다른 답변 중 하나를 사용해야 합니다.
필드를 읽기 전용으로 하고 제출 시 모든 읽기 전용 필드를 비활성화 시킬 수 있습니다.
$(".myform").submit(function(e) {
$("input[readonly]").prop("disabled", true);
});
입력(+스크립트)은
<input type="text" readonly="readonly" name="test" value="test" />
$('input[readonly]').click(function () {
$(this).removeAttr('readonly');
});
실제 예:
$(".myform").submit(function(e) {
$("input[readonly]").prop("disabled", true);
e.preventDefault();
});
$('.reset').click(function () {
$("input[readonly]").prop("disabled", false);
})
$('input[readonly]').click(function () {
$(this).removeAttr('readonly');
})
input[readonly] {
color: gray;
border-color: currentColor;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form class="myform">
<input readonly="readonly" value="test" />
<input readonly="readonly" value="test" />
<input readonly="readonly" value="test" />
<input readonly="readonly" value="test" />
<input readonly="readonly" value="test" />
<input readonly="readonly" value="test" />
<input readonly="readonly" value="test" />
<input readonly="readonly" value="test" />
<input readonly="readonly" value="test" />
<button>Submit</button>
<button class="reset" type="button">Reset</button>
</form>
CSS를 사용하는 대안을 제안합니다.
input.disabled {
user-select : none;
-moz-user-select : none;
-webkit-user-select : none;
color: gray;
cursor: pointer;
}
디세이블 애트리뷰트 대신.그 후, 독자적인 CSS 어트리뷰트를 추가하고, 디세이블이 된 입력을 시뮬레이트 할 수 있습니다.단, 제어력이 향상됩니다.
$(function() {
$("input:disabled").closest("div").click(function() {
$(this).find("input:disabled").attr("disabled", false).focus();
});
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<div>
<input type="text" disabled />
</div>
disabled
, , , , , , 을 하는 것을 해 볼 수 .readonly
CSS를 을 할 수.「 「 CSS 」 「 」 「 」 「 CSS 」 。disabled
syslog.syslog.syslog.
사실 다른 문제가 있어요. '''change
포커스를 만 트리거합니다.이 아닙니다.이것은, 「포커스」를 고려한 것이 아닙니다.이것은 로직이 아닙니다.disabled
필드. 다른 콜에서 이 필드에 데이터를 푸시하고 있을 수 있습니다.이 작업을 수행하려면 'bind' 이벤트를 사용할 수 있습니다.
$('form').bind('change', 'input', function () {
console.log('Do your thing.');
});
또는 jQuery와 CSS를 사용하여 이 작업을 수행합니다.
$('input.disabled').attr('ignore','true').css({
'pointer-events':'none',
'color': 'gray'
});
이렇게 하면 요소를 사용할 수 없는 것처럼 보이게 하고 포인터 이벤트가 발생하지 않지만 전파가 허용되므로 전송되는 경우 '무시' 속성을 사용하여 요소를 무시할 수 있습니다.
우리는 오늘 이런 문제가 있었지만 HTML을 바꾸고 싶지 않았다. 그래서 우리는 그것을 이루기 위해 mouseenter 이벤트를 사용했다.
var doThingsOnClick = function() {
// your click function here
};
$(document).on({
'mouseenter': function () {
$(this).removeAttr('disabled').bind('click', doThingsOnClick);
},
'mouseleave': function () {
$(this).unbind('click', doThingsOnClick).attr('disabled', 'disabled');
},
}, 'input.disabled');
나는 Andy E와 매우 유사한 무언가를 했다. 다만 나는 주변 태그를 사용했다.하지만 '이름'이 필요해서 'href'가 없는 태그로 바꿨습니다.
닮지요.disabled
와 Attribute의 조합을 readonly
:
Faux-Disabled: <input type="text" value="1" readonly="1" style="background-color:#F6F6F6;"><br>
Real-Disabled: <input type="text" disabled="true" value="1"></input>
주의: 이것은 일반적인 동작은 아닙니다.disabled
<form>
그러면 서버에서 필드를 볼 수 없게 됩니다.이는 서버 측에서 중요하지 않은 필드를 사용 불가능으로 설정하려는 경우에 한합니다.
다른 해결책을 찾았습니다.
<input type="text" class="disabled" name="test" value="test" />
클래스 "disabled"는 불투명도에 의해 비활성화된 요소를 전송합니다.
<style type="text/css">
input.disabled {
opacity: 0.5;
}
</style>
그런 다음 요소가 비활성화되어 있으면 이벤트를 취소하고 클래스를 제거합니다.
$(document).on('click','input.disabled',function(event) {
event.preventDefault();
$(this).removeClass('disabled');
});
여기서의 제안도 이 질문에 대한 좋은 후보처럼 보인다.
비활성화된 요소에서 클릭 이벤트를 수행하시겠습니까?Javascript jQuery
jQuery('input#submit').click(function(e) {
if ( something ) {
return false;
}
});
언급URL : https://stackoverflow.com/questions/3100319/event-on-a-disabled-input
'source' 카테고리의 다른 글
스탠드아론 mariaDB 서버에 비해 galera의 퍼포먼스가 매우 나쁘다 (0) | 2022.11.28 |
---|---|
휴지 상태 오류: 동일한 식별자 값을 가진 다른 개체가 세션에 이미 연결되어 있습니다. (0) | 2022.11.28 |
클라이언트 측 프로그래밍과 서버 측 프로그래밍의 차이점은 무엇입니까? (0) | 2022.11.19 |
PDF에 HTML 및 CSS를 추가하는 방법 (0) | 2022.11.19 |
C 구조의 메모리 얼라인 (0) | 2022.11.19 |