Функция копирования Javascript — это должно работать, но не

#javascript #html #css

#javascript #HTML #css

Вопрос:

Хорошо, я делал это миллион раз. Это расстраивает, я ни за что на свете не могу понять, почему это не копирует мой контент из (notefield) Мне нужна свежая пара глаз, чтобы называть меня пустышкой….

Это сработает с 1 попытки, а затем не сработает еще с 20 попыток. У меня такое чувство, что это связано с чем-то, что я делаю, что я упускаю из виду.

моя функция CopyReset () просто терпит неудачу в 90% случаев, и я запускал эту функцию 10000 раз, прежде чем никаких проблем…

HTML (с функцией копирования)

 <html>
<head>
<title> Tech Helper </title>
<link rel="stylesheet" type="text/css" href="csslayout.css">
<script src="scriptsnewTicket.js"></script>
</head>
<header> 
<div id='header' class='header'>
<div id='logo' class='logo' align='right'> 
<img src="redactedlink" class='banner'></img>
</div> 
<div class='headtable'>
<table id='headtable'>
<tr>
<th>Technician Name: <input type="text" id='techName' value=""> </th>
</tr>
</table>
</div>
</div>
</header>
<body onload="LoadScript()">

<div id='container' class='container'> 
<table id='containertable' class='tabcontainer'>
<tr>
<td class='tableft'><div id='navmenu'></div></td>
<td class='tabright'><table id='content'></table></th>
</tr>
</table>
</div>
</body>
<div id='footer' class='footer'> 
<table id='foottable' class='foottable'>
<tr>
<th> Footer </th>
</tr>
</table>
</div>
<textarea id="notefield" class="hiddentext"></textarea>

<script> 

function CopyReset() { 
var target = document.getElementById('notefield');
target.select();
document.execCommand('copy');

//alert("Cancellation Notes Copied");
document.getElementById("content").innerHTML = "";
//document.getElementById("notefield").value = "";
}

</script>
</html>
  

Javascript newTicket.js

 function LoadScript() { 
document.getElementById('navmenu').innerHTML = "<input type='button' onclick='NewTicket()' 
class='navButton' value='New Ticket' id='newTicket'>";
}

var reached = "false";
function NewTicket() { 
var incident = prompt("Enter Incident Number");
var c =  document.getElementById("content");

if ( incident == null || incident.length != 15 ) { 
alert("Invalid Incident Number Entered, Please enter a valid Incident number!");
}
else if ( incident != null amp;amp; incident.length == 15 ) { 
c.innerHTML = "<tr> <td colspan='100%'> Incident: <input type='text' id='incField' value='' 
class='readonlyfield' readonly></td></td>";
c.innerHTML  = "<tr id='contactInfo1'> <th colspan='2'>Please Select Contact Method:</th></tr><tr 
id='contactInfo2'><td colspan='2 class='td1'><div id='contactInfo' align='center'> Phone: <input 
type='radio' onclick='phoneContact()' name='contactType' id='phone'> Skype: <input type='radio' 
onclick='skypeContact()' name='contactType' id='skype'></div></td></tr>";
document.getElementById('incField').value = incident;
document.getElementById('navmenu').innerHTML = "";
document.getElementById('navmenu').innerHTML = "<input type='button' class='navButton' value='Cancel 
Ticket' onclick='CancelTicket()' id='endTicket'>";
 
}


}


function phoneContact() {
var numberUsed = prompt('Please Enter the number you called the user at');
if ( numberUsed == null ) {
alert('Must enter a Phone Number');
}
else if (numberUsed != null) { 
document.getElementById('notefield').value  = "Reached user at: "   numberUsed   "n"; 
reached = "true";
document.getElementById('contactInfo1').innerHTML = "";
document.getElementById('contactInfo2').innerHTML = "";
}

} 

function skypeContact() {
var skypeLog = prompt('Please Contact Log to begin');
if ( skypeLog == null ) {
alert('Must Provide Contact Log!');
}
else if (skypeLog != null) { 
document.getElementById('notefield').value  = "Reached User via Skype: "   skypeLog   "n"; 
reached = "true";
document.getElementById('contactInfo1').innerHTML = "";
document.getElementById('contactInfo2').innerHTML = "";

}

} 


function CancelTicket() { 
    if (reached == "false" ) { 
        alert('Canno Cancel Ticket Without Contact');
    }
    else if (reached == "true" ) {
        var reason = prompt("Reason for cancelling ticket: ");
                if (reason == null) {
            alert('Cancel Reason cannot be blank!');
            }
            else if (reason != null) {
                document.getElementById('navmenu').innerHTML = "<input type='button' 
class='navButton' 
onclick='NewTicket()' value='New Ticket' id='newTicket'>";
                document.getElementById('notefield').value  = "Ticket Cancelled, Reason: "   reason;
                CopyReset();
        }
    }
}
  

И для CSS layout от SNG.css

 .header {
border-radius: 10px 10px 0px 0px;
background-color:blue;
width: auto;
margin-left: 20px;
margin-right: 20px;
margin-top:20px;
height: 80px;
position:relative;
}
.headtable { 
position:absolute;
margin: 20px 10px 0px 10px;
vertical-align: text-bottom;
}
.logo { 
width:350px;
padding-top:10px;
padding-right:10px;
float:right;
}
.td1 { 
text-align: right;
}
.banner { 
}
.hiddentext {
opacity:100%;
}
.incbox {
float:left;
}
.readonlyfield { 
background-color: #eee;
}

.navButton { 
width: 100%;
height:25px;
border-radius: 5px 5px 5px 5px;
border-color:blue;
}
.navButton:Hover { 
border-radius: 1px 1px 1px 1px;
border-color:black;
background:lightblue;
opacity: 96%;
}


.container {
background-color:green;
width: auto;
height: 600px;
position:relative;
margin-left: 20px;
margin-right: 20px;
}

.tabcontainer {
width: 100%;
height: 600px;
}
.tableft {
vertical-align: text-top;
background-color: yellow;
width:15%;;

}
.tabright {
vertical-align: text-top;
background-color: pink;
}

.footer {
position:relative;
border-radius: 0px 0px 10px 10px;
bottom: 0px;
background-color:red;
width: auto;
height: 80px;
margin-left: 20px;
margin-right: 20px;
margin-bottom: 20px;
}
  

Комментарии:

1. Пожалуйста, создайте пример на JSBin или CodePen, спасибо!

Ответ №1:

Хорошо, здесь я немного исправил ошибку в вашем JS-коде, особенно некоторые разрывы строк в одинарных кавычках, где помещены некоторые html-теги… Также добавлен блок для запуска JS только после загрузки DOM, не знаю, так ли это, но в песочнице здесь он выдает ошибку без этого. Итак, проверьте демонстрацию ниже, в моем случае текст вставляется в textarea и копируется в буфер обмена при отмене заявки

 function LoadScript() { 
document.getElementById('navmenu').innerHTML = "<input type='button' onclick='NewTicket()' class='navButton' value='New Ticket' id='newTicket'>";
}

var reached = "false";
function NewTicket() { 
var incident = prompt("Enter Incident Number");
var c =  document.getElementById("content");

if ( incident == null || incident.length != 15 ) { 
alert("Invalid Incident Number Entered, Please enter a valid Incident number!");
}
else if ( incident != null amp;amp; incident.length == 15 ) { 
c.innerHTML = "<tr> <td colspan='100%'> Incident: <input type='text' id='incField' value='' class='readonlyfield' readonly></td></td>";
c.innerHTML  = "<tr id='contactInfo1'> <th colspan='2'>Please Select Contact Method:</th></tr><tr id='contactInfo2'><td colspan='2 class='td1'><div id='contactInfo' align='center'> Phone: <input type='radio' onclick='phoneContact()' name='contactType' id='phone'> Skype: <input type='radio' onclick='skypeContact()' name='contactType' id='skype'></div></td></tr>";
document.getElementById('incField').value = incident;
document.getElementById('navmenu').innerHTML = "";
document.getElementById('navmenu').innerHTML = "<input type='button' class='navButton' value='Cancel Ticket' onclick='CancelTicket()' id='endTicket'>";
 
}


}


function phoneContact() {
var numberUsed = prompt('Please Enter the number you called the user at');
if ( numberUsed == null ) {
alert('Must enter a Phone Number');
}
else if (numberUsed != null) { 
document.getElementById('notefield').value  = "Reached user at: "   numberUsed   "n"; 
reached = "true";
document.getElementById('contactInfo1').innerHTML = "";
document.getElementById('contactInfo2').innerHTML = "";
}

} 

function skypeContact() {
var skypeLog = prompt('Please Contact Log to begin');
if ( skypeLog == null ) {
alert('Must Provide Contact Log!');
}
else if (skypeLog != null) { 
document.getElementById('notefield').value  = "Reached User via Skype: "   skypeLog   "n"; 
reached = "true";
document.getElementById('contactInfo1').innerHTML = "";
document.getElementById('contactInfo2').innerHTML = "";

}

} 


function CancelTicket() { 
    if (reached == "false" ) { 
        alert('Canno Cancel Ticket Without Contact');
    }
    else if (reached == "true" ) {
        var reason = prompt("Reason for cancelling ticket: ");
                if (reason == null) {
            alert('Cancel Reason cannot be blank!');
            }
            else if (reason != null) {
                document.getElementById('navmenu').innerHTML = "<input type='button' class='navButton' onclick='NewTicket()' value='New Ticket' id='newTicket'>";
                document.getElementById('notefield').value  = "Ticket Cancelled, Reason: "   reason;
                CopyReset();
        }
    }
}  
 .header {
border-radius: 10px 10px 0px 0px;
background-color:blue;
width: auto;
margin-left: 20px;
margin-right: 20px;
margin-top:20px;
height: 80px;
position:relative;
}
.headtable { 
position:absolute;
margin: 20px 10px 0px 10px;
vertical-align: text-bottom;
}
.logo { 
width:350px;
padding-top:10px;
padding-right:10px;
float:right;
}
.td1 { 
text-align: right;
}
.banner { 
}
.hiddentext {
opacity:100%;
}
.incbox {
float:left;
}
.readonlyfield { 
background-color: #eee;
}

.navButton { 
width: 100%;
height:25px;
border-radius: 5px 5px 5px 5px;
border-color:blue;
}
.navButton:Hover { 
border-radius: 1px 1px 1px 1px;
border-color:black;
background:lightblue;
opacity: 96%;
}


.container {
background-color:green;
width: auto;
height: 600px;
position:relative;
margin-left: 20px;
margin-right: 20px;
}

.tabcontainer {
width: 100%;
height: 600px;
}
.tableft {
vertical-align: text-top;
background-color: yellow;
width:15%;;

}
.tabright {
vertical-align: text-top;
background-color: pink;
}

.footer {
position:relative;
border-radius: 0px 0px 10px 10px;
bottom: 0px;
background-color:red;
width: auto;
height: 80px;
margin-left: 20px;
margin-right: 20px;
margin-bottom: 20px;
}  
 <html>
<head>
<title> Tech Helper </title>
<link rel="stylesheet" type="text/css" href="csslayout.css">
<script src="scriptsnewTicket.js"></script>
</head>
<header> 
<div id='header' class='header'>
<div id='logo' class='logo' align='right'> 
<img src="redactedlink" class='banner'></img>
</div> 
<div class='headtable'>
<table id='headtable'>
<tr>
<th>Technician Name: <input type="text" id='techName' value=""> </th>
</tr>
</table>
</div>
</div>
</header>
<body onload="">

<div id='container' class='container'> 
<table id='containertable' class='tabcontainer'>
<tr>
<td class='tableft'><div id='navmenu'></div></td>
<td class='tabright'><table id='content'></table></th>
</tr>
</table>
</div>
</body>
<div id='footer' class='footer'> 
<table id='foottable' class='foottable'>
<tr>
<th> Footer </th>
</tr>
</table>
</div>
<textarea id="notefield" class="hiddentext"></textarea>

<script> 

function CopyReset() { 
var target = document.getElementById('notefield');
target.select();
document.execCommand('copy');

//alert("Cancellation Notes Copied");
document.getElementById("content").innerHTML = "";
//document.getElementById("notefield").value = "";
}

// Wait for DOM loads
document.addEventListener("DOMContentLoaded", function() {
  LoadScript()
});

</script>
</html>  

Комментарии:

1. итак, @tarkh к сожалению, я сталкиваюсь с той же проблемой, иногда она будет копировать, но не каждый раз. Я думаю, что это связано с кнопкой, добавляемой через javascript, я попробую это со статической кнопкой и посмотрю, что произойдет.

2. ну, не удается воспроизвести в Safari 13 на macOS

3. проблема в Chrome на Win 10. Это копировалось некорректно, также мне удалось немного отладить его и удалить некоторый код из моих инструкций if в моей функции отмены, по-видимому, функция вызывала проблему с тем, что она не копировалась. Он скопировал 1 из, возможно, 20 раз. теперь у меня это работает каждый раз, когда я нажимаю.

Ответ №2:

Разобрался с этим, не удаляя кнопки

newTicet.js

 function LoadScript() {
    document.getElementById('navmenu').innerHTML = "<input type='button' onclick='NewTicket()' class = 'navButton'value = 'New Ticket'id = 'newTicket' > ";
}
reached = 0;
function NewTicket() {
    var incident = prompt("Enter Incident Number");
    var c = document.getElementById("content");
if (incident == null || incident.length != 15) {
    alert("Invalid Incident Number Entered, Please enter a valid Incident number!");
} 
else if (incident != null amp;amp; incident.length == 15) {
    c.innerHTML = "<tr> <td colspan='100%'> Incident: <input type='text' id='incField' value='' class = 'readonlyfield' readonly> </td></td> ";
    c.innerHTML  = "<tr id='contactInfo1'> <th colspan='2'>Please Select Contact Method:</th></tr><tr id='contactInfo2'> <td colspan = '2 class='td1'><div id='contactInfo' align='center'> Phone: <input type='radio' onclick='phoneContact()' name='contactType'id = 'phone' > Skype: <input type='radio' onclick = 'skypeContact()' name = 'contactType' id = 'skype' > </div></td > </tr>";
    document.getElementById('incField').value = incident;
    document.getElementById('navmenu').innerHTML = "";
    document.getElementById('navmenu').innerHTML = "<input type='button' class='navButton' value='Cancel Ticket' onclick='CancelTicket()' id='endTicket'>";
    }
}
function phoneContact() {
    var numberUsed = prompt('Please Enter the number you called the user at');
    if (numberUsed == null) {
         alert('Must enter a Phone Number');
} 
else if (numberUsed != null) {
        document.getElementById('notefield').value  = "Reached user at: "   numberUsed   "n";
        reached = 1;
        document.getElementById('contactInfo1').innerHTML = "";
        document.getElementById('contactInfo2').innerHTML = "";
    } 
}

function skypeContact() {
    var skypeLog = prompt('Please Contact Log to begin');
    if (skypeLog == null) {
        alert('Must Provide Contact Log!');
} 
else if (skypeLog != null) {
        document.getElementById('notefield').value  = "Reached User via Skype: "   skypeLog   "n";
        reached = 1;
        document.getElementById('contactInfo1').innerHTML = "";
        document.getElementById('contactInfo2').innerHTML = "";
    }
 }

function CancelTicket() {
    if (Boolean(reached) == false) {
    alert("Cannot Cancel Ticket Without Contact");
} 
 else if (Boolean(reached) == true) {
       var reason = prompt("Reason for cancelling ticket: ");
  } 
if (reason == null) {
    alert("Cancel Reason cannot be blank!");
  }
     else if (reason != null) {
            document.getElementById('navmenu').innerHTML = "<input type='button' class='navButton' onclick='NewTicket()' value='New Ticket' id='newTicket'>";
        document.getElementById('notefield').value  = "Ticket Cancelled, Reason: "   reason;
    CopyReset();
    }
}
function CopyReset() {
var target = document.getElementById('notefield');
target.select();
document.execCommand('copy');
alert("Cancellation Notes Copied");
document.getElementById("content").innerHTML = "";
document.getElementById("notefield").value = "";
}