FrontEnd/JQuery

[JQuery/Javascript] 동적으로 생성한 input : radio 값 변경 막기 (클릭 이벤트 처리)

s.a 2022. 1. 11. 11:32
반응형

3개의 라디오 버튼 중 1개만 선택하여 값을 보내고 싶은 상황이다.

<input class="radio" type="radio" name="fruits" value="apple" checked/>
<input class="radio" type="radio" name="fruits" value="orange"/>
<input class="radio" type="radio" name="fruits" value="banana"/>

특정 사용자만 radio값을 변경할 수 있는 상황이었다.

그래서 그 외 사용자에게는 radio 컴포넌트의 값을 수정할 수 없게 하려고 하였다.

<input type="radio"/>는 disabled 속성을 이용하여 값을 변경할 수 없도록 고정할 수 있다.

 

하지만...... disabled 속성을 사용하면 두가지 단점이 있다.

1. Form 안에 넣어서 submit을 할 때 값이 전달되지 않는다.

2. 사용불가능한 상태라서 라디오 버튼의 컬러가 어두운 회색이 된다.

 

나는 2번의 이유로(라디오 버튼의 값을 변경하지는 못하지만, 컬러는 어두워지지 않길 원함)

disabled 속성이 아닌 click 이벤트로 처리를 하였다.

 

일단은 두 가지 방법 모두 소개하려고 한다.

 

▶ radio value 못바꾸게 막기

1.태그 생성시 막기

1-1. disabled 속성 사용하여 값 변경 막기

<input class="radio" type="radio" name="fruits" value="apple" disabled="disabled" checked/>
<input class="radio" type="radio" name="fruits" value="orange" disabled="disabled"/>
<input class="radio" type="radio" name="fruits" value="banana" disabled="disabled"/>

1-2. click 이벤트로 값 변경 막기

<input class="radio" type="radio" name="fruits" value="apple" onclick="return(false);" checked>
<input class="radio" type="radio" name="fruits" value="orange" onclick="return(false);">
<input class="radio" type="radio" name="fruits" value="banana" onclick="return(false);">

2. JQurey로 스크립트 써서 막기

2-1. disabled 속성 사용하여 값 변경 막기

if(!activeUser){ // 현 사용자의 페이지가 아니면
	$(".radio").attr('disabled', 'disabled');
	//$(".radio").attr('disabled', true); //<= 이것도 가능하다.
}

2-2. click 이벤트로 값 변경 막기

$(document).ready(function() {
    $(".radio").on('click', function(){
        if(!activeUser){ // 현 사용자의 페이지가 아니면
            return (false); // ==> 클릭되어도 값이 바뀌지 않는다!
        }
    });
}

 

▶ 동적으로 radio를 만든 경우, radio click 이벤트 처리

이걸로 조금 애먹었다.....

 

동적으로 생성하는 라디오(radio), 체크박스(checkbox)는

document.ready가 실행될 때 로드되지 않았기 이벤트에 바인딩을 걸 수 없다.

 

동적으로 radio, checkbox를 만들었을 때는 document.ready에 이벤트를 만들지 말자....

아래 코드로 작성하면 동적으로 만든 radio에 이벤트를 바인딩할 수 있다.

$(document).on('click', '.radio', function(){
	if(!activeUser){ // 현 사용자의 페이지가 아니면
 		return (false); // ==> 클릭되어도 값이 바뀌지 않는다!
  	}
});

 

출처: https://zest0804.tistory.com/entry/동적으로-radio-checkbox를-만든-경우-동작하지-않는-이벤트-처리하기-onclick-onchange [퍼주는 마음 부자]