JavaScript가 양식을 인쇄 할 때 수정 된 컨텐츠가 작동하지 않는 이유는 무엇입니까?
JavaScript 인쇄 양식 : 콘텐츠 업데이트 실패 문제 해결
JavaScript를 사용하여 양식을 인쇄 할 때, 때로는 텍스트 텍스트 텍스트 필드 및 확인란과 같은 양식 컨텐츠가 업데이트되는 문제가 발생하지만 인쇄 결과는 이전 값을 보여줍니다. 이 기사는이 문제의 원인을 분석하고 솔루션을 제공합니다.
문제 설명 :
사용자는 양식 (텍스트 및 확인란 확인 상태 포함)으로 컨텐츠를 입력하거나 수정하지만 출력 결과는 이러한 변경 사항을 반영하지 않습니다.
샘플 코드 (문제가 있음) :
<meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>문서</title> <div id="divKanZhengPanel-binli"> <div class="checkDiv"> <label>올바른 위치</label> <label>외부 경사</label> <label>내부 경사</label> <label>외부 숨겨진 경사</label> <label>암시 적 경사</label> </div> </div> <button id="dw">인쇄하려면 나를 클릭하십시오</button> <script> document.getElementById('dw').addEventListener('click', function() { let docHtml1 = $("#divKanZhengPanel-binli").prop("outerHTML"); $('#print-iframe').remove(); let iframe1 = document.createElement('IFRAME'); let doc1 = null; iframe1.id = "print-iframe"; iframe1.style = 'position:absolute;width:0px;height:0px;left:-0px;top:-0px;visibility: auto;'; document.body.appendChild(iframe1); doc1 = iframe1.contentWindow.document; doc1.write(docHtml1); doc1.close(); iframe1.contentWindow.focus(); iframe1.contentWindow.print(); }) </script>
문제의 원인 :
원래 코드는 outerHTML
사용하여 양식 요소의 HTML 컨텐츠를 얻습니다. 이 방법은 요소의 정적 HTML 구조 만 가져 오며 동적으로 업데이트 된 양식 값을 포함하지 않습니다.
해결책:
cloneNode(true)
메소드를 사용하여 양식 요소를 복제하십시오. cloneNode(true)
폼 요소의 현재 값을 포함하여 요소 및 모든 하위 노드 및 속성을 복사합니다.
개선 된 코드 :
<meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <div id="divKanZhengPanel-binli"> <div class="checkDiv"> <label>올바른 위치</label> <label>외부 경사</label> <label>내부 경사</label> <label>외부 숨겨진 경사</label> <label>암시 적 경사</label> </div> </div> <button id="dw">인쇄하려면 나를 클릭하십시오</button> <script> document.getElementById('dw').addEventListener('click', function() { $('#print-iframe').remove(); let iframe1 = document.createElement('IFRAME'); let doc1 = null; iframe1.id = "print-iframe"; iframe1.style = 'position:absolute;width:0px;height:0px;left:-0px;top:-0px;visibility: auto;'; document.body.appendChild(iframe1); setTimeout(function() { // 使用setTimeout确保iframe加载完成 doc1 = iframe1.contentWindow.document; doc1.body.appendChild(document.querySelector('#divKanZhengPanel-binli').cloneNode(true)); doc1.close(); iframe1.contentWindow.focus(); iframe1.contentWindow.print(); }); }) </script>
cloneNode(true)
사용하면 인쇄 된 양식 컨텐츠는 페이지에서 작성된 사용자의 수정을 정확하게 반영합니다. 인쇄 내용의 빈도를 피하기 위해 iframe 컨텐츠가로드 된 후 인쇄 작업이 수행되도록 setTimeout
기능이 추가되었습니다. 코드가 $
기호를 사용하므로 코드에 jQuery 라이브러리를 소개하십시오. jQuery를 사용하지 않으면 원시 JavaScript 메소드를 사용하여 요소를 선택해야합니다.
위 내용은 JavaScript가 양식을 인쇄 할 때 수정 된 컨텐츠가 작동하지 않는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

상위 카테고리 아카이브 페이지에 자식 카테고리를 표시하는 방법을 알고 싶습니까? 분류 아카이브 페이지를 사용자 정의 할 때 방문자에게 더 유용하기 위해이를 수행해야 할 수도 있습니다. 이 기사에서는 부모 카테고리 아카이브 페이지에 자식 카테고리를 쉽게 표시하는 방법을 보여줍니다. 하위 범주가 부모 카테고리 아카이브 페이지에 나타나는 이유는 무엇입니까? 부모 카테고리 아카이브 페이지에 모든 자식 카테고리를 표시하면 방문자에게 덜 일반적이고 유용 할 수 있습니다. 예를 들어, 책에 대한 WordPress 블로그를 실행하고 "테마"라는 분류법을 가지고 있다면 독자가 할 수 있도록 "소설", "논픽션"과 같은 하위 세포 체질을 추가 할 수 있습니다.

가상 통화 가격 상승의 요인은 다음과 같습니다. 1. 시장 수요 증가, 2. 공급 감소, 3. 긍정적 인 뉴스, 4. 낙관적 시장 감정, 5. 거시 경제 환경; 감소 요인에는 다음이 포함됩니다. 1. 시장 수요 감소, 2. 공급 증가, 3. 부정적인 뉴스의 파업, 4. 비관적 시장 감정, 5. 거시 경제 환경.

스프링 프로젝트 스타트 업에서 원형 종속성의 무작위성을 이해하십시오. Spring Project를 개발할 때는 프로젝트 시작시 원형 종속성으로 인한 무작위성에 직면 할 수 있습니다 ...

JDBC ...

배치 쿼리에 redistemplate을 사용할 때 반환 값이 비어있는 이유는 무엇입니까? 배치 쿼리 작업에 redistemplate를 사용하는 경우 반환 된 결과가 발생할 수 있습니다 ...

JavaScript가 일일 프로그래밍에서 사용자 컴퓨터 하드웨어 정보를 얻을 수없는 이유에 대한 토론 많은 개발자가 JavaScript를 직접 얻을 수없는 이유에 대해 궁금합니다 ...

RedistemPlate.opSforList (). LeftPop ()가 전달 숫자를 지원하지 않는 이유와 관련하여. Redis를 사용할 때 많은 개발자가 문제가 발생합니다. 왜 Redistempl ...

Laravel과 YII의 주요 차이점은 설계 개념, 기능적 특성 및 사용 시나리오입니다. 1. Laravel은 개발의 단순성과 즐거움에 중점을두고 Eloquentorm 및 Artisan 도구와 같은 풍부한 기능을 제공하며 빠른 개발 및 초보자에게 적합합니다. 2.YII는 성능과 효율성을 강조하고, 고 부하 애플리케이션에 적합하며, 효율적인 Activerecord 및 캐시 시스템을 제공하지만 가파른 학습 곡선이 있습니다.
