자바스크립트 J쿼리 관련 질문드립니다.

조회수 474회

안녕하세요. 자바스크립트 관련해서 질문드립니다.

원하는 것은 새로운 창이 열리고 값을 입력받고 새 창이 닫힐 때 j쿼리 스크립트 함수 실행입니다. 현재 새 창이 열리고 값 입력받고 새 창을 닫을 때 그 값을 content(text박스)에 넣어서 가져옵니다.

text박스로 값을 확인해 보면 값은 제대로 넘어옵니다. //content의 값은 rgb값을 받아옵니다)// 그래서 그것을 이용해서 div로 박스를 만들고 배경으로해서 색깔을 확인하려고합니다. 근데, 막상 저 함수안에서 alert나 console.log로 찍어보면 아무값도 들어있지 않습니다.

text박스에는 분명 들어잇는데, var content에는 안들어있으니 div를 넣어도 빈 박스만 나와서 어떻게 해결을 해야할지 모르겠습니다. 그래서 open함수가 끝나고 실행되는 함수를 찾아봤지만 아직까지는 찾지 못했고, content을 onchange로 바꿔서 실행해보았지만 작동하지않습니다.

어떻게 해야할지 조언부탁드립니다.

<script>
$('#btn').on('click', function(){
        var win = window.open("testpage", "testpage","left=200,width=680,height=530");
                var content = $('#content').val();<---??
                var con = "<div style='background-color:"+content+"width:300px; height:300px'>";    
                //var con의 내용을 jsp에서 이대로 쓰면 제대로 실행됩니다. 
        $("#testcol").append("<div style='background-color:"+color+"width:300px; height:300px'></div>"); 
<script>

//html 'jsp'
<div id="testcol">
    <input type="button" id="btn" value="테스트버튼">
    <input type="text" id="content" value="">

    <div id="testcol">

    </div>

</div>


//새창 관련 함수

<script>
$('#colorbtn').on('click', function(){
        var c = $('.colorpreview').css('background-color');
        $('#color').val(c);
        opener.document.getElementById("color").value=document.getElementById("color").value;
        self.close();
    })


  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • 말씀하시는 "open함수가 끝나고 실행되는 함수"는 딱히 없고 굳이 찾자면 다음 코드가 그 역할(자식창의 값을 부모창에 전달)을 하고 있습니다.

    opener.document.getElementById("color").value=document.getElementById("color").value;
    

    그러니까 부모창에서는 이렇게 해야 작동을 할 거 같은데 말이죠...?

    var content = $('#color').val();
    

    그나저나 단지 어떤 색상을 뽑아오기 위해 새창을 띄우고 계신 거라면 그렇게 하지 마시고 jquery color picker 플러그인들이 여러가지 있으니 그중에 하나 골라서 적용하세요.

    • d아 제가 헷갈려서 content로 바꿔놓앗습니다. 새창 함수도 바꾼다는걸 깜빡했습니다. 말씀해주신대로 지금 되어있고, 컬러도 jquery color picker 플러그인을 이용해서 그 값을 이용하고있습니다. 제가 단순히 색의 rgb 값을 사용할 요량이 아니라, 데이터 베이스에 넣어서 값들을 비교해서 사용할 목적이라서 rgb값을 받아와야합니다. 근데 제가 알기로는 자바스크립트에 첫번째 스크립트의 동작 순서가 window.open이 끝나고 난후 var content = $("#content").val()이 실행되는걸로 알고 있습니다. 근데, 막상 확인을 해보면 아무 값도 들어가 있지않아서, 어떻게 해야될지 해서 여쭈어봤습니다. 알 수 없는 사용자 2020.4.26 12:06
    • 그리고 그 이후로 alert(content)를 하는 경우는 새창이 열리고 바로 alert가 떠버려서 제대로 동작이 안되는걸 봐서는 window.open이 끝나고 동작이 되는건 아닌가요? 알 수 없는 사용자 2020.4.26 12:13
    • 그러니까 <input id="content">가 원래는 <input id="color">인건가요? 그걸 잘못 올리신거라구요? 그리고 var content = $('#content').val(); 스크립트는 새 창에서 value를 할당해주리라 예상했고 그 value를 받아오려고 작성한거구요? 편집요청빌런 2020.4.27 10:34
    • 만약 제 추측이 맞다면, var content 시점에 아무값도 없는게 정상입니다. window.open() 후의 스크립트는 새 창에서 무슨 일이 생길 때까지 실행을 멈추는게 아니기 때문입니다. 편집요청빌런 2020.4.27 10:37

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)