我試圖禁用一個按鈕來防止在同步ajax調用中多次單擊。我的代碼如下。Jquery禁用同步通話按鈕
<!DOCTYPE html>
<html>
\t <head>
\t <meta charset="UTF-8">
\t \t <link type="text/css" rel="stylesheet" href="http://fonts.googleapis.com/css?family=Roboto:300,400,500,700"> <!-- optional font -->
\t \t <script src="https://code.jquery.com/jquery-3.2.1.min.js" integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4=" crossorigin="anonymous"></script>
\t \t <script type="text/javascript">
$(document).ready(function(){
\t var test = false;
$(document).on('click', '#test', function(e){
\t console.log(test);
\t if (test) {
\t \t return;
\t }
\t test = true;
ajax_call();
});
function ajax_call() {
\t $.ajax({
contentType: 'application/json;charset=utf-8',
type: 'POST',
url: 'https://validdomain',
dataType: 'json',
xhrFields: {
withCredentials: true
},
crossDomain: true,
data: JSON.stringify({'test' : 'test'}),
success: function(data, textStatus, jqXHR) {
console.log(data);test =false;
copypaste();
test = false;
},
error: function(jqXHR, textStatus, errorThrown) {
console.log(textStatus);
test = false;
},
async: false,
});
}
function copypaste() {
\t var tempInput = document.createElement("textarea");
tempInput.setAttribute('id', 'copyid');
tempInput.style = "position: absolute; left: -1000px; top: -1000px";
tempInput.value = 'Text Copied';
console.log(tempInput);
document.body.appendChild(tempInput);
tempInput.select();
var result = document.execCommand('copy');
\t document.body.removeChild(tempInput);
if (result) {
alert('copied');
}
else {
\t alert('not copied');
}
return result;
}
});
</script>
\t </head>
\t <body>
\t \t <input type="submit" id="test"/>
\t </body>
</html>
但我的按鈕沒有在第二次點擊禁用(我收到警報兩次)。如果我將ajax請求作爲異步調用,則禁用按鈕。有什麼辦法可以在同步調用期間禁用我的按鈕嗎?
在此先感謝!
永遠不要使用'異步:FALSE'。這是一個糟糕的做法,並被瀏覽器供應商棄用。看看你的瀏覽器控制檯中的警告 – charlietfl
另外,如果你使用同步阿賈克斯,你不必禁用按鈕 – Musa
我知道這是一個可怕的選擇。但是我使用它,因爲如果從ajax回調函數觸發document.execCommand不起作用。所以我必須使用async:false,以便將我的copypaste()函數移到ajax之外。 – savithraj