Javascript 为什么我的点击事件对脚本中的按钮不起作用?
我启用了一个按钮事件&在dropdownlist值更改时调用。它在Edge上不工作,但在其他浏览器上工作完全正常。 按钮不起任何作用,单击时不会发生任何事情。我调试过了,控件在那里,甚至两次,但事件仍然没有触发。 任何帮助都将不胜感激 html-Javascript 为什么我的点击事件对脚本中的按钮不起作用?,javascript,jquery,microsoft-edge,Javascript,Jquery,Microsoft Edge,我启用了一个按钮事件&在dropdownlist值更改时调用。它在Edge上不工作,但在其他浏览器上工作完全正常。 按钮不起任何作用,单击时不会发生任何事情。我调试过了,控件在那里,甚至两次,但事件仍然没有触发。 任何帮助都将不胜感激 html- @Html.EditorFor(x => x.PensionPayrollSchemeDesc, new { TabIndex = 1, id = "pension-payroll-schemes-list" }) $("#pension-pa
@Html.EditorFor(x => x.PensionPayrollSchemeDesc, new { TabIndex = 1, id = "pension-payroll-schemes-list" })
$("#pension-payroll-schemes-list").on(
"change",
{
url: "SelectedSchemeProcessingButtons",
model: decodes
},
onSchemeSelection);
// Event handler for changing the selected scheme
function onSchemeSelection(evt) {
resetMessages(true);
setProcessButtons(evt.data.url, false);
}
// Using the selected scheme, check the current status and set the buttons accordingly
function setProcessButtons(actionUrl, refresh) {
let scheme = $("#pension-payroll-schemes-list").val();
if (scheme === '') {
setFileNetCaseRefState();
return;
}
let selection = $("#PensionPayrollSchemeNumber").val();
if (selection && selection > 0) {
$('#processingModal').foundation('open');
setFileNetCaseRefState(selection);
let suppressInfoMessage = refresh;
return $.ajax({
url: actionUrl,
data: antiforgeryModule.addAntiForgeryToken({ payrollSchemeNumber: selection, suppressInfoMessage: suppressInfoMessage }),
type: 'POST',
error: function (xhr, status, error) {
$('#processingModal').foundation('close');
errorHandling.displayError(xhr, status, error, 'globalFormError');
errorHandling.clearSuccess('globalFormSuccess');
},
success: function (response) {
$('#processingModal').foundation('close');
if (response) {
$('#actionButtons').html(response);
}
setActions();
}
});
}
}
// bind an action to the specified button click event
function setAction(id, action, closeModal) {
let button = $("#" + id);
button.off("click").on("click", action, processAction);
}
// Set the process button actions
function setActions() {
setAction("doYearEnd", {
url: YearEndJobAction,
override: false,
model: decodes,
closeModal: false,
next: function () {
displaySuccess(YearEndSubmittedMessage);
}
});
}
// Using the selected scheme, check the current status and set the buttons accordingly
function setProcessButtons(actionUrl, refresh) {
let scheme = $("#pension-payroll-schemes-list").val();
if (scheme === '') {
setFileNetCaseRefState();
return;
}
let selection = $("#PensionPayrollSchemeNumber").val();
if (selection && selection > 0) {
return $.ajax({
url: actionUrl,
data: antiforgeryModule.addAntiForgeryToken({ payrollSchemeNumber: selection }),
type: 'POST',
error: function (xhr, status, error) {
errorHandling.displayError(xhr, status, error, 'globalFormError');
errorHandling.clearSuccess('globalFormSuccess');
},
success: function (response) {
if (response) {
$('#actionButtons').html(response);
}
setActions();
}
});
}
}
@EditorFor(x=>x.PensionPayrollSchemeDesc,新{TabIndex=1,
id=“养老金工资计划列表”})
请尝试使用F12开发工具检查Html元素和自定义属性。从上面的代码可以看出,如果使用F12开发人员工具检查HTML元素,似乎需要添加一些自定义属性(TabIndex和id),结果如下:
@Html.EditorFor(model => model.PensionPayrollSchemeDesc, new { htmlAttributes = new { @class = "form-control", id = "pension-payroll-schemes-list", TabIndex = 1 } })
我们可以看到id属性是“PensionPayrollSchemeDesc”,而不是“PensionPayrollSchemesList”。因此,更改事件不起作用
尝试按以下方式修改代码:
@Html.EditorFor(model => model.PensionPayrollSchemeDesc, new { htmlAttributes = new { @class = "form-control", id = "pension-payroll-schemes-list", TabIndex = 1 } })
渲染后,结果如下所示:
@Html.EditorFor(model => model.PensionPayrollSchemeDesc, new { htmlAttributes = new { @class = "form-control", id = "pension-payroll-schemes-list", TabIndex = 1 } })
最后,根据id属性在其上附加更改事件。我们如何重现您的问题?如果无法重现问题,能否发布足够的代码(包括html元素和相关脚本)重现问题,如中所示。我添加了更多代码,请参阅@clonedI添加了更多代码,请参阅@zhi lv msft什么是
@Html.EditorFor
,以及新的{TabIndex=1,id=“养老金工资方案列表”}
是什么类型的语法?在我看来,这不像是有效的Javascript语法。这个问题只出现在edge中,同样的代码在IE11中运行良好。另外,这是供您参考的DOM,ID对我来说似乎没问题-尝试在setProcessButtons函数、setAction函数和setActions函数中设置调试器,然后使用F12开发人员调试器工具一步一步地调试脚本,确保执行这些函数。您还可以使用控制台工具来检查是否有错误?此外,请尝试清除边缘浏览器数据(缓存、历史记录),然后重新测试。根据您的代码,我创建了一个示例(代码中,我删除了一些重复的函数(例如:setProcessButtons)以及未定义的变量和模式),它在我这边运行良好,请检查它。