gpt4 book ai didi

javascript - $(document).ready(function () Uncaught ReferenceError : is not defined

转载 作者:行者123 更新时间:2023-11-30 07:37:53 26 4
gpt4 key购买 nike

HTML:

<button type="button" onclick="deleteAdress('@_address.AddressID','@Model.CustomerID','@ViewData["appid"]','@ViewData["_retVal"]')">Delete</button>

JS:

$(document).ready(function () {
var customerID = $("#hidcustomerid").val();
if (customerID != "0") {
function deleteAdress(adressId, customerId, appid, retVal) {
window.location.href = '/Customer/DeleteAdress/?adressId=' + adressId + "&customerId=" + customerId + "&appid=" + appid + "&retVal=" + retVal;
}
}
});

如果我在 $(document).ready() 之外使用 deleteAdress 函数,该函数有效

如果我在 $(document).ready() 中使用 deleteAdress,该函数会在单击按钮时显示错误。

错误:

Uncaught ReferenceError: deleteAdress is not defined

剩余的 HTML:

<table>
@foreach (ObjectModelLibrary.Address _address in Model.Addresses.List)
{
<tr>
<th>
<button type="button" class="btn btn-sm btn-danger" onclick="deleteAdress('@_address.AddressID','@Model.CustomerID','@ViewData["appid"]','@ViewData["_retVal"]')"><i class="icon-remove"></i>Delete</button>
</th>

</tr>
}
</table>

如何在 $(document).ready() 函数中使用 deleteAdress 函数?

最佳答案

正如我最初在评论中提到的,您的函数不是全局函数,因此 onclick 处理程序无法看到。

其次,函数周围有一个 if 没有任何效果 ( http://jsfiddle.net/TrueBlueAussie/gdptaxvv/ ),因为该函数被提升到其父范围内的顶部,因此它始终存在。您可以使用另一种声明函数的方法来避免这种情况,但我不推荐它,例如var deleteAddress = function(){},但范围仍然阻止 onclick 处理程序看到它。

作为一般准则,不要将 基于属性 的处理程序与 jQuery 一起使用(例如 onclick="")。它将处理程序与事件注册分开,并且不支持多个处理程序。

  1. 添加一个新类来标识您的删除按钮。例如下面示例中的 class="deleteAddress"

  2. 将任何键值作为 data- 属性注入(inject)到项目中,并以 jQuery 方式处理事件。这也意味着您的条件检查将按您的预期工作:

例如具有数据属性的 HTML:

<table>
@foreach (ObjectModelLibrary.Address _address in Model.Addresses.List)
{
<tr>
<th>
<button class="deleteAddress btn btn-sm btn-danger" type="button" data-addressId="@_address.AddressID" data-customerId="@Model.CustomerID" data-appId="@(ViewData["appid"])" data-retVal="@(ViewData["_retVal"])">Delete</button>
</th>
</tr>
}
</table>

注意: 我在我认为可能会混淆 Razor 的两个属性上添加了一些 () 包装器,但可能不需要,除非它给出错误。

代码:

$(document).ready(function () {
var customerID = $("#hidcustomerid").val();
if (customerID != "0") {
$('.deleteAddress').click(function(){
// Get key values from data- attributes "of the clicked button"
var addressId = $(this).data("addressId");
var customerId = $(this).data("customerId");
var appid = $(this).data("appId");
var retVal = $(this).data("retVal");
window.location.href = '/Customer/DeleteAddress/?addressId=' + addressId + "&customerId=" + customerId + "&appid=" + appid + "&retVal=" + retVal;
});
}
});

上面的示例假设按钮是每行一个,因此属性将与该行的删除相关。

旁注:

我强烈建议使用 Ajax 进行删除,而不是设置窗口位置。然后,您可以交互方式删除该行,无需刷新页面

例如Ajax 版本:

$(function () {
var customerID = $("#hidcustomerid").val();
if (customerID != "0") {
$('.deleteAddress').click(function(){
// Get displayed row to delete
var $tr = $(this).closest('tr');
// Get key values from data- attributes "of the clicked button"
var addressId = $(this).data("addressId");
var customerId = $(this).data("customerId");
var appid = $(this).data("appId");
var retVal = $(this).data("retVal");
$.get('/Customer/DeleteAdress/?addressId=' + addressId + "&customerId=" + customerId + "&appid=" + appid + "&retVal=" + retVal).done(function(){
// Delete succeeded, delete the screen row
$tr.remove();
});
});
}
});

$(document).ready(function(){}); 有一个较短的版本,您应该使用:

$(function(){
// Your DOM ready code here.
});

它也支持这个版本(使用局部范围的 $ 以避免冲突):

jQuery(function($){
// Your DOM ready code here using a locally scoped $
});

关于javascript - $(document).ready(function () Uncaught ReferenceError : is not defined,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26845763/

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