>source

여기에 내가하려고하는 것입니다. 상당히 "JavaScriftify"UI 컨트롤이있는 CMS 시스템이 있습니다. 각 사용자 정의 유형, 각각에 할당 된 많은 이벤트 등이 등이 있습니다. 내 작업은 일부 필드가 "비활성화"되지 않고 일부 필드가 변경되지 않고 "데이터가 서버로 전송 될 때 무시되지 않도록 무시되지 않도록하십시오. 내 자신의 위젯이로드되기 전에 응용 프로그램 및 기타 위젯이 할 수있는 모든 기능을 제어 할 수 없습니다. 그리고 이번에는 이미 많은 것들이 있습니다 (할당 된 이벤트 등).

현재 구현은 다음과 같습니다.

blockField: function($input)
    {
        if ($input.length===0) { return; }
        $input.prop('readonly', true);
        //Workaround for calendar widget
        if ($input.hasClass('date_field')) {
            $input
                .removeClass('date_field')
                .addClass('text-input');
        }
        var $valueCell= this.getFieldContainer($input);
        $valueCell.on('focus', '*', function(event) {
            this.error(this.w_code, 'One cannot simply change this field!');
            return false;
        }.bind(this));
    },

이것은 모든 종류의 위젯과 잘 작동하지 않습니다. 다른 단점도 있습니다.

그래서, 아이디어는 모든 이벤트를 위젯의 컨테이너에 방식으로 차단하고 더 깊은 전파를 중지하는 것입니다.

나의 순진 시도는 다음과 같습니다.

    $valueCell.get(0).addEventListener('click', function (e) {
            e.stopPropagation();
            this.error(this.w_code, "Just don't…");
            return false;
        }.bind(this), true);

컨테이너 ($ Valuecell)를 통과하지 못하도록 "클릭"을 방지하는 것으로 보인다. 그러나 유사한 트릭은 "Focus"이벤트와 함께 작동하지 않습니다. 나는 그걸 막으려 고 노력했다$ INPUT.그 자체로e.preventdefault ()e.StopimMediatePropagation ()-행운이 없어.

이런 문제를 실제로 해결 한 사람이 있습니까?

@gatsbill은 이미 읽기를 설정했습니다. 요소가 집중되는 것을 방지하지는 않습니다. 실제로, 그것은 단지 화장품 의미 만 있지만 (입력은 초점을 바꾸는 것으로 변화)하지만 어쨌든 피하고 싶습니다. 스크린 세트

pilat2021-05-08 21:31:53
  • 이전 mongodb : 몽고드의 객체 필드를 Golang의 구조체에 어떻게 매핑 할 수 있습니까?
  • 다음 r : 둘 이상의 행 데이터 프레임을 확인하는 중복을 제거합니다