最近項目里有個新的小需求,就是主機打開一個網頁Demo,連接的安卓設備打開同一個網頁Demo,兩個頁面是一樣的,簡單來說就是一個網頁Demo打開兩個頁面A和B,在頁面A中操作什么頁面B中就顯示什么,反之亦然。
**JS代碼**
<!DOCTYPE html> <html> <head> <title>測試網頁</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript" src="js/jquery-1.8.3.min.js"></script> <script src="js/jquery.min.js"></script> <style> .book-main { padding: 20px 30px; text-align: center; } .book-main .title { font-size: 18px; font-weight: 600; } .book-main .v-name { font-size: 16px; font-weight: 600; padding: 10px 0 15px 0; } .book-main .inoculant-info-box { font-size: 16px; font-weight: 600; text-align: left; padding-left: 2em; } .inoculant-info-box > div { display: inline-block; margin-right: 50px; } .book-main .content { text-align: left; line-height: 24px; } .book-main .content h3 { margin: 0; font-size: 16px; } .content .con-box { font-size: 16px; border: 1px solid #000; margin: 15px 0; padding: 10px; } .autograph-con .name { display: inline-block; min-width: 120px; border-bottom: 1px solid #000; height: 50px; line-height: 0; vertical-align: bottom; } .autograph-con .name img { height: 60px; width: auto; } .autograph-con .date { display: inline-block; margin-top: 15px; } .footer-autograph { margin-top: 20px; border-top: 2px solid #0abf92; padding-top: 20px; } .health-table { width: 100%; border: 1px solid #000; border-collapse: collapse; text-align: center; } .health-table th, .health-table td { border: 1px solid #000; padding: 4px 10px; } .health-table tr td:first-child { text-align: left; } .health-table td .radio { display: inline-block; width: 100%; } .radio .el-icon { display: inline-block; width: 14px; height: 14px; background-color: #fff; border: 1px solid #a1a2a2; position: relative; margin-left: 8px; z-index: 1; font-size: 14px; vertical-align: middle; } .radio .el-icon-check { background-color: #409eff; color: #fff; border: 1px solid #409eff; } .propose-con { font-size: 16px; font-weight: 600; padding: 8px 0 0 0; } .propose-con label { margin-right: 20px; } .sign-wrapper { position: fixed; width: 100%; height: 100%; top: 0; left: 0; background: #fff; z-index: 999; } .sign-main .sign-title { position: absolute; width: 80%; height: 36px; top: 15px; left: 10%; background: #32b16c; border-radius: 18px; color: #fff; font-size: 20px; line-height: 36px; text-align: center; } .sign-footer { background: #fff; } .remark-input { display: inline-block; height: 28px; border: 1px solid #ddd; } </style> </head> <body> <div id="mContent"> <div class="book-main book-main-health" id="healthShow"> <div class="title">XXXXXXXXXX</div> <div class="content"> <div class="con" style="text-indent: 2em;">XXXXXXXXXXXXX</div> <table class="health-table" id="healthTable"> </table> <div class="con"> <div class="propose-con"> <table class="health-table"> <tr> <th width="55%">情況</th> <th width="25%" colspan="2">是或否</th> <th width="20%">備注</th> </tr> <tr> <td>1.XXXXX? </td> <td> <label class="radio"><span>是</span> <input type="radio" name="radio1" id="radio_1_1" value="1" onchange="healthAnswer()"> </label> </td> <td> <label class="radio"><span>否</span> <input type="radio" name="radio1" id="radio_1_2" value="0" onchange="healthAnswer()"> </label> </td> <td><input type="text" class="remark-input" id="text_1" onchange="healthAnswer()"></td> </tr> <tr> <td>2.XXXXXXXXXX? </td> <td> <label class="radio"><span>是</span> <input type="radio" name="radio2" value="1" id="radio_2_1" onchange="healthAnswer()"> </label> </td> <td> <label class="radio"><span>否</span> <input type="radio" name="radio2" value="0" id="radio_2_2" onchange="healthAnswer()"> </label> </td> <td><input type="text" class="remark-input" id="text_2" onchange="healthAnswer()"></td> </tr> <tr> <td>3.XXXXX?</td> <td> <label class="radio"><span>是</span> <input type="radio" name="radio3" value="1" id="radio_3_1" onchange="healthAnswer()"> </label> </td> <td> <label class="radio"><span>否</span> <input type="radio" name="radio3" value="0" id="radio_3_2" onchange="healthAnswer()"> </label> </td> <td><input type="text" class="remark-input" id="text_3" onchange="healthAnswer()"></td> </tr> <tr> <td>4.XXXXXXXXXX?</td> <td> <label class="radio"><span>是</span> <input type="radio" name="radio4" id="radio_4_1" value="1" onchange="healthAnswer()"> </label> </td> <td> <label class="radio"><span>否</span> <input type="radio" name="radio4" id="radio_4_2" value="0" onchange="healthAnswer()"> </label> </td> <td><input type="text" class="remark-input" id="text_4" onchange="healthAnswer()"></td> </tr> <tr> <td>5.XXXXXXXXXX? </td> <td> <label class="radio"><span>是</span> <input type="radio" name="radio5" id="radio_5_1" value="1" onchange="healthAnswer()"> </label> </td> <td> <label class="radio"><span>否</span> <input type="radio" name="radio5" id="radio_5_2" value="0" onchange="healthAnswer()"> </label> </td> <td><input type="text" class="remark-input" id="text_5" onchange="healthAnswer()"></td> </tr> <tr> <td>6.XXXXXXXXXX? </td> <td> <label class="radio"><span>是</span> <input type="radio" name="radio6" id="radio_6_1" value="1" onchange="healthAnswer()"> </label> </td> <td> <label class="radio"><span>否</span> <input type="radio" name="radio6" id="radio_6_2" value="0" onchange="healthAnswer()"> </label> </td> <td><input type="text" class="remark-input" id="text_6" onchange="healthAnswer()"></td> </tr> <tr> <td>7.XXXXXXXXXX? </td> <td> <label class="radio"><span>是</span> <input type="radio" name="radio7" id="radio_7_1" value="1" onchange="healthAnswer()"> </label> </td> <td> <label class="radio"><span>否</span> <input type="radio" name="radio7" id="radio_7_2" value="0" onchange="healthAnswer()"> </label> </td> <td><input type="text" class="remark-input" id="text_7" onchange="healthAnswer()"></td> </tr> <tr> <td>8.XXXXXXXXXX? </td> <td> <label class="radio"><span>是</span> <input type="radio" name="radio8" id="radio_8_1" value="1" onchange="healthAnswer()"> </label> </td> <td> <label class="radio"><span>否</span> <input type="radio" name="radio8" id="radio_8_2" value="0" onchange="healthAnswer()"> </label> </td> <td><input type="text" class="remark-input" id="text_8" onchange="healthAnswer()"></td> </tr> <tr> <td>9.XXXXXXXXXX? </td> <td> <label class="radio"><span>是</span> <input type="radio" name="radio9" id="radio_9_1" value="1" onchange="healthAnswer()"> </label> </td> <td> <label class="radio"><span>否</span> <input type="radio" name="radio9" id="radio_9_2" value="0" onchange="healthAnswer()"> </label> </td> <td><input type="text" class="remark-input" id="text_9" onchange="healthAnswer()"></td> </tr> <tr> <td>10.XXXXXXXXXX? </td> <td> <label class="radio"><span>是</span> <input type="radio" name="radio10" id="radio_10_1" value="1" onchange="healthAnswer()"> </label> </td> <td> <label class="radio"><span>否</span> <input type="radio" name="radio10" id="radio_10_2" value="0" onchange="healthAnswer()"> </label> </td> <td><input type="text" class="remark-input" id="text_10" onchange="healthAnswer()"></td> </tr> </table> </div> <div class="autograph-con clear"> <div class="fl"> 甲方(簽名): <span class="name sign-name"> <img src="" class="inquirySignature" /> </span> <!-- <span class="fingerprint-show"> <img src="./images/FingerPrintBase64.png" class="fingerprint-img"/> </span> --> </div> <div class="fr"> 日期: <span class="date"></span> </div> </div> <div class="bold-con">XXXXXXXXXX。</div> <div class="autograph-con clear"> <div class="fl"> 乙方(簽名): <span class="name"> <img src="" class="img_sign_doctor" /> </span> </div> <div class="fr"> 日期: <span class="date"></span> </div> </div> </div> <div style="text-align: right; margin-top: 10px">XXXXXXXXXX</div> </div> </div> </div> <div class="el-row" style="text-align: center;"> <button type="button" class="el-button el-button-success" onClick="send()"><span>發送頁面</span></button> <button type="button" class="el-button el-button-success"><span>XXX</span></button> <button type="button" class="el-button el-button-success"><span>提交</span></button> </div> <script> var radio_value = new Array(10); var text_value = new Array(10); var webSocket; webSocket = new WebSocket('ws://localhost:12580'); console.log("連接成功"); webSocket.onerror = function(event) { alert("連接錯誤"); }; webSocket.onopen = function(event) { //alert("open"+event.data); //console.log(event); }; webSocket.onclose = function(event) { alert("服務不存在或者被關閉"); //onClose(event); }; webSocket.onmessage = function(event) { var GetMsg = event.data; alert(GetMsg); var Jobj = JSON.parse(GetMsg); console.log("JSON.parse解析GetMsg",Jobj); //$("#fin").attr('src',"data:obj" + obj); var aaa = Jobj.type; var bbb = Jobj.UserJson; var Tobj = JSON.parse(bbb); var Hobj = Tobj.Info; var Mobj = Hobj.healthInquiries; Object.keys(Mobj).forEach(function(key, value){ console.log(key,":",Mobj[key].answer); console.log(key,":",Mobj[key].remark); }); for(var i=0 ; i < Mobj.length ; i++) { var GetID = Mobj[i].id; var remarkValue = Mobj[i].remark; var answerValue = Mobj[i].answer; if(GetID == 858) { document.getElementById("text_1").value = remarkValue; if(answerValue == "1"){ radio_1_1.checked = true; radio_1_2.checked = false; }else if(answerValue == "0"){ radio_1_2.checked=true; radio_1_1.checked = false; }else if(answerValue == 'null'){ radio_1_1.checked = false; radio_1_2.checked = false; } continue; } else if(GetID == 859) { document.getElementById("text_2").value = remarkValue; if(answerValue == "1"){ radio_2_1.checked = true; radio_2_2.checked = false; }else if(answerValue == "0"){ radio_2_2.checked=true; radio_2_1.checked = false; }else if(answerValue == 'null'){ radio_2_1.checked = false; radio_2_2.checked = false; } continue; } else if(GetID == 860) { document.getElementById("text_3").value = remarkValue; if(answerValue == "1"){ radio_3_1.checked = true; radio_3_2.checked = false; }else if(answerValue == "0"){ radio_3_2.checked=true; radio_3_1.checked = false; }else if(answerValue == 'null'){ radio_3_1.checked = false; radio_3_2.checked = false; } continue; }else if(GetID == 861) { document.getElementById("text_4").value = remarkValue; if(answerValue == "1"){ radio_4_1.checked = true; radio_4_2.checked = false; }else if(answerValue == "0"){ radio_4_2.checked=true; radio_4_1.checked = false; }else if(answerValue == 'null'){ radio_4_1.checked = false; radio_4_2.checked = false; } continue; }else if(GetID == 862) { document.getElementById("text_5").value = remarkValue; if(answerValue == "1"){ radio_5_1.checked = true; radio_5_2.checked = false; }else if(answerValue == "0"){ radio_5_2.checked=true; radio_5_1.checked = false; }else if(answerValue == 'null'){ radio_5_1.checked = false; radio_5_2.checked = false; } continue; }else if(GetID == 863) { document.getElementById("text_6").value = remarkValue; if(answerValue == "1"){ radio_6_1.checked = true; radio_6_2.checked = false; }else if(answerValue == "0"){ radio_6_2.checked=true; radio_6_1.checked = false; }else if(answerValue == 'null'){ radio_6_1.checked = false; radio_6_2.checked = false; } continue; }else if(GetID == 864) { document.getElementById("text_7").value = remarkValue; if(answerValue == "1"){ radio_7_1.checked = true; radio_7_2.checked = false; }else if(answerValue == "0"){ radio_7_2.checked=true; radio_7_1.checked = false; }else if(answerValue == 'null'){ radio_7_1.checked = false; radio_7_2.checked = false; } continue; }else if(GetID == 865) { document.getElementById("text_8").value = remarkValue; if(answerValue == "1"){ radio_8_1.checked = true; radio_8_2.checked = false; }else if(answerValue == "0"){ radio_8_2.checked=true; radio_8_1.checked = false; }else if(answerValue == 'null'){ radio_8_1.checked = false; radio_8_2.checked = false; } continue; }else if(GetID == 866) { document.getElementById("text_9").value = remarkValue; if(answerValue == "1"){ radio_9_1.checked = true; radio_9_2.checked = false; }else if(answerValue == "0"){ radio_9_2.checked=true; radio_9_1.checked = false; }else if(answerValue == 'null'){ radio_9_1.checked = false; radio_9_2.checked = false; } continue; }else if(GetID == 867) { document.getElementById("text_10").value = remarkValue; if(answerValue == "1"){ radio_10_1.checked = true; radio_10_2.checked = false; }else if(answerValue == "0"){ radio_10_2.checked=true; radio_10_1.checked = false; }else if(answerValue == 'null'){ radio_10_1.checked = false; radio_10_2.checked = false; } return; } } //onMessage(event) }; function send() { // 捷宇發送到設備櫃外清的方法 var actions = { "Info": { "healthShow": true, "healthInquiries": [{ "id": 858, "inquiryId": 1, "inquiryContent": "XXXXXXXXXX? ", "answer": radio_value[0], "remark": text_value[0], "markType": 0, "markOptions": null }, { "id": 859, "inquiryId": 2, "inquiryContent": "XXXXXXXXXX? ", "answer": radio_value[1], "remark": text_value[1], "markType": 0, "markOptions": null }, { "id": 860, "inquiryId": 3, "inquiryContent": "XXXXXXXXXX? ", "answer": radio_value[2], "remark": text_value[2], "markType": 0, "markOptions": null }, { "id": 861, "inquiryId": 4, "inquiryContent": "XXXXXXXXXX? ", "answer": radio_value[3], "remark": text_value[3], "markType": 0, "markOptions": null }, { "id": 862, "inquiryId": 5, "inquiryContent": "XXXXXXXXXX? ", "answer": radio_value[4], "remark": text_value[4], "markType": 0, "markOptions": null }, { "id": 863, "inquiryId": 6, "inquiryContent": "XXXXXXXXXX? ", "answer": radio_value[5], "remark": text_value[5], "markType": 0, "markOptions": null }, { "id": 864, "inquiryId": 7, "inquiryContent": "XXXXXXXXXX? ", "answer": radio_value[6], "remark": text_value[6], "markType": 0, "markOptions": null }, { "id": 865, "inquiryId": 8, "inquiryContent": "XXXXXXXXXX? ", "answer": radio_value[7], "remark": text_value[7], "markType": 0, "markOptions": null }, { "id": 866, "inquiryId": 9, "inquiryContent": "XXXXXXXXXX? ", "answer": radio_value[8], "remark": text_value[8], "markType": 1, "markOptions": null }, { "id": 867, "inquiryId": 10, "inquiryContent": "XXXXXXXXXX? ", "answer": radio_value[9], "remark": text_value[9], "markType": 0, "markOptions": null }], "vaccineInfoList": [{ "id": 3, "vaccineCode": "0311", "vaccineName": "XXXXXXXXXX" }, { "id": 4, "vaccineCode": "0303", "vaccineName": "XXXXXXXXXX" }], "adviceType": null, "adviceVaccineInfoId": null, "inquirySignature": null, "signatureWorker": null, "currentDate": "2020年08月13日" }, "FileName": "test1.html", "Location": "0,1,215,220", "IsOpenRecored": 1, "IsSnap": 1 , } var UserJson = JSON.stringify(actions); DoGWQ_StartFormExchange(UserJson); } function DoGWQ_StartFormExchange(UserJson) { var json = {}; json.type = 117; json.UserJson = UserJson; var jsonStr = JSON.stringify(json); webSocket.send(jsonStr); } function healthAnswer() { var times = 0; for(var i = '1' ; i <= '10' ; i++) { radio_value[times] = $('input[name="radio'+i+'"]:checked').val(); if(radio_value[times] == null) radio_value[times] = 'null'; times++; } times = 0; for(var i = '1'; i <= '10'; i++) { var temp = "text_" + i; text_value[times] = document.getElementById("text_" + i).value; if(text_value[times] == null) text_value[times] = 'null'; times++; } send(); } </script> </body> </html>
用JS寫了整個頁面,有單選框和文本框。
**效果展示**
整個頁面大致就是下面這個樣子了:
點擊第一個頁面,第二個頁面收到信息並解析:
文本框再測試一下:
完美,哈哈哈哈哈!
**注意**
一切的實現離不開一個完美的服務,這里我就不貼了,告訴你們自己的后端大兄弟讓他幫你搞定,這里只提供前端頁面哈!
**備注**
今天剛注冊,第一篇博文,哈哈哈,不足之處多多海涵,啦啦啦!
轉載注明出處,應該沒人轉吧,😂