gpt4 book ai didi

javascript - javascript 函数属性 setter 中的延迟

转载 作者:行者123 更新时间:2023-12-03 07:15:19 26 4
gpt4 key购买 nike

我们在单击按钮时调用 JavaScript 函数,并在该函数的第一行禁用该按钮。 (我们需要禁用该按钮,以便用户不会多次按下同一个按钮)

示例代码如下:

<button class="btn btn-primary DialogSaveBtn" onclick="SavePatientExamination();">Save changes</button>

function SavePatientMedicine()
{
$(".DialogSaveBtn").attr("disabled", "disabled");

var patId = $("#PatId").val();
var appId = $("#PatAppId").val();
var visitNo = $("#PatVisitNo").val();

var valid = true;
var data = new Array();
var tablecount = 0;
$("#MedListTbl .DataRow").each(function () {
debugger;
if ($(this).find(".MedDays").val() == "" || $(this).find(".MedDays").val() <= 0 ||parseInt($(this).find(".MedDays").val())!= parseFloat($(this).find(".MedDays").val()))
{
alert("please enter valid 'Days' for medicines.");
valid = false;
return false;
}
tablecount = tablecount + 1;
var row = {
"iPMID": $(this).find(".RecId").val(),
"PatId": patId,
"AppId": appId,
"MedicineId": $(this).find(".MedId").val(),

};

data.push(row);
});
if (tablecount > 0 && valid) {
$.ajax({
url: '@Url.Action("SavePatientMedicine","OPD")',
type: "POST",
dataType: 'json',
contentType: 'application/json;',
data: JSON.stringify(data),
success: function (msg) {
if (msg == true) {
toastr.success('Record Added Successfully', 'Medicine');
var appId = $("#PatAppId").val();

$('#OPDMedDialog').modal('hide');
$(".DialogSaveBtn").removeAttr("disabled");
} else {
alert("Unable to save data");
$(".DialogSaveBtn").removeAttr("disabled");
}
},
error: function () {
alert("an error occured while saving data");
$(".DialogSaveBtn").removeAttr("disabled");
}
});
}
else {
// $(".DialogSaveBtn").removeAttr("disabled");
}

}

我们面临的问题是,如果用户同时单击该按钮,该函数会在按钮实际禁用之前被调用两次。

感谢任何帮助..

最佳答案

您没有阻止按钮的默认行为,因此即使您设置了禁用属性,按钮仍会继续其正常行为。

在此示例中,我添加了一个事件监听器(而不是使用内联 onclick 属性)并阻止按钮的默认行为。然后我设置禁用的属性(不是属性)。检查浏览器的控制台,看看即使双击,“clicked”的 console.log 也只会触发一次。

$(function(){
$(".DialogSaveBtn").on("click",SavePatientMedicine);

function SavePatientMedicine(e){
//prevent the normal button behaviour
e.preventDefault();
//set disabled property (not attr)
$(".DialogSaveBtn").prop("disabled", true);
//...
console.log("clicked");
}

});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="btn btn-primary DialogSaveBtn">Save changes</button>

更新:

要将内联事件保留在适当的位置(按照评论中的要求),只需将事件传递到函数中即可:

  
function SavePatientMedicine(e){
//prevent the normal button behaviour
e.preventDefault();
//set disabled property (not attr)
$(".DialogSaveBtn").prop("disabled", true);
//...
console.log("clicked");
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<button class="btn btn-primary DialogSaveBtn" onclick="SavePatientMedicine(event)">Save changes</button>

关于javascript - javascript 函数属性 setter 中的延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36449475/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com