<function> 未在 HTMLButtonElement.onclick 处定义
<function> is not defined at HTMLButtonElement.onclick
美好的一天,
我有一个按钮
<button id="4" onclick="UpdateStatus(this.id)" class="btn btn-default" type="button">update</button>
正在调用 ajax 函数
<script>
$(document).ready(function () {
function UpdateStatus(Id) {
$.ajax({
type: "Post",//or POST
url: '/myController/UpdateSomething?Id=' + Id,
// (or whatever your url is)
data: { data1: var1 },
success: function (responsedata) {
// process on data
alert("got response as " + "'" + responsedata + "'");
}
});
}
}
</script>
我的问题是我收到一个错误消息:
UpdateStatus is not defined at HTMLButtonElement.onclick
我做错了什么?谢谢
更新
当我尝试运行这个代码时
@section scripts
{
<script>
$(document).ready(function () {
//Carga datos del curso
console.log("asdf");
});</script>}
我的控制台中没有收到消息。
问题是,您正在 jQuery 的 document.ready
事件中定义您的方法定义。解析和呈现按钮标记时,未定义 JavaScript 方法,因此出现错误。
jquery ready
方法稍后在文档准备好后执行(HTML 的解析和渲染已经完成,DOM 可以安全被访问)。至此,HTML 已经呈现。
在它外面定义它。
<script>
function UpdateStatus(Id) {
alert('UpdateStatus called');
}
$(function () {
});
</script>
另一种选择是使用 unobutrusive JavaScript。因此,不是将点击事件处理程序连接到按钮标记,而是稍后在触发文档就绪时连接。
<button id="4" class="btn btn-default" type="button">update</button>
并连接点击事件
$(function () {
$("#4").click(function (e) {
e.preventDefault();
alert('User clicked');
});
});
这绝对是一个范围问题,因为UpdateStatus
定义在document.ready()
函数的范围内。您可以将 UpdateStatus
声明为 document.ready()
块之外的变量,并在其中声明一个函数:
var UpdateStatus;
$(document).ready(function () {
UpdateStatus = function () {
var buttonId = $('#4').attr('id');
$.ajax({
type: "POST",
url: '/myController/UpdateSomething',
data: { Id: buttonId, ... }, // setting parameters
success: function (responsedata) {
// process on data
alert("got response as '" + responsedata + "'");
}
});
}
});
此外,基于标准事件注册模型和 separation of concerns,我建议您通过检索按钮 ID 来使用不显眼的 JavaScript:
$(document).ready(function () {
$('#4').click(function() {
var buttonId = $(this).attr('id');
$.ajax({
type: "POST",
url: '/myController/UpdateSomething',
data: { Id: buttonId, ... }, // setting parameters
success: function (responsedata) {
// process on data
alert("got response as '" + responsedata + "'");
}
});
});
});
因为您正在使用 AJAX POST,所以不需要在 URL 中使用查询字符串参数,例如 url: '/myController/UpdateSomething?Id=' + Id
.
相关问题:
Why is inline event handler attributes a bad idea in modern semantic HTML?
<script>
function F(user_id) {
var user_id = user_id;
$.ajax({
type:"GET",
url:"http://127.0.0.1:8000/preference",
data: {'user_id':user_id},
async: false,
success: function (result) {
console.log(result)
}
});
}
</script>
第一行自动不显示。它是脚本的 type 和 src 属性。我使用了 "text/javascript" 和“http://code.jquery.com/jquery-latest.js”。
这个问题我找到了2个解决方案。一种是如上。将脚本分为两部分。其次是将功能移动到按钮标签下。
这确实是一个范围问题。但是我没有找到解决方案的逻辑。但是我解决了。
美好的一天,
我有一个按钮
<button id="4" onclick="UpdateStatus(this.id)" class="btn btn-default" type="button">update</button>
正在调用 ajax 函数
<script>
$(document).ready(function () {
function UpdateStatus(Id) {
$.ajax({
type: "Post",//or POST
url: '/myController/UpdateSomething?Id=' + Id,
// (or whatever your url is)
data: { data1: var1 },
success: function (responsedata) {
// process on data
alert("got response as " + "'" + responsedata + "'");
}
});
}
}
</script>
我的问题是我收到一个错误消息:
UpdateStatus is not defined at HTMLButtonElement.onclick
我做错了什么?谢谢
更新
当我尝试运行这个代码时
@section scripts
{
<script>
$(document).ready(function () {
//Carga datos del curso
console.log("asdf");
});</script>}
我的控制台中没有收到消息。
问题是,您正在 jQuery 的 document.ready
事件中定义您的方法定义。解析和呈现按钮标记时,未定义 JavaScript 方法,因此出现错误。
jquery ready
方法稍后在文档准备好后执行(HTML 的解析和渲染已经完成,DOM 可以安全被访问)。至此,HTML 已经呈现。
在它外面定义它。
<script>
function UpdateStatus(Id) {
alert('UpdateStatus called');
}
$(function () {
});
</script>
另一种选择是使用 unobutrusive JavaScript。因此,不是将点击事件处理程序连接到按钮标记,而是稍后在触发文档就绪时连接。
<button id="4" class="btn btn-default" type="button">update</button>
并连接点击事件
$(function () {
$("#4").click(function (e) {
e.preventDefault();
alert('User clicked');
});
});
这绝对是一个范围问题,因为UpdateStatus
定义在document.ready()
函数的范围内。您可以将 UpdateStatus
声明为 document.ready()
块之外的变量,并在其中声明一个函数:
var UpdateStatus;
$(document).ready(function () {
UpdateStatus = function () {
var buttonId = $('#4').attr('id');
$.ajax({
type: "POST",
url: '/myController/UpdateSomething',
data: { Id: buttonId, ... }, // setting parameters
success: function (responsedata) {
// process on data
alert("got response as '" + responsedata + "'");
}
});
}
});
此外,基于标准事件注册模型和 separation of concerns,我建议您通过检索按钮 ID 来使用不显眼的 JavaScript:
$(document).ready(function () {
$('#4').click(function() {
var buttonId = $(this).attr('id');
$.ajax({
type: "POST",
url: '/myController/UpdateSomething',
data: { Id: buttonId, ... }, // setting parameters
success: function (responsedata) {
// process on data
alert("got response as '" + responsedata + "'");
}
});
});
});
因为您正在使用 AJAX POST,所以不需要在 URL 中使用查询字符串参数,例如 url: '/myController/UpdateSomething?Id=' + Id
.
相关问题:
Why is inline event handler attributes a bad idea in modern semantic HTML?
<script>
function F(user_id) {
var user_id = user_id;
$.ajax({
type:"GET",
url:"http://127.0.0.1:8000/preference",
data: {'user_id':user_id},
async: false,
success: function (result) {
console.log(result)
}
});
}
</script>
第一行自动不显示。它是脚本的 type 和 src 属性。我使用了 "text/javascript" 和“http://code.jquery.com/jquery-latest.js”。 这个问题我找到了2个解决方案。一种是如上。将脚本分为两部分。其次是将功能移动到按钮标签下。 这确实是一个范围问题。但是我没有找到解决方案的逻辑。但是我解决了。