JQuery 按钮点击不起作用
JQuery button click does not work
我有一个 JQuery FIddle properly running. It uses a JQUERY Steps PlugIn . Now if you run JQuery FIddle 在最后一步你会发现三个按钮 "Save"、"Previous" 和 "Finish"。
如果我点击 Save button
,我想显示一条警告说 "you have been clicked"。如果滚动到 JSFiddle 中 HTML 部分的底部,您将找到以下代码。
代码工作正常:
// on Save button click
$(".actions").on("click",".saveBtn",function(){
alert("You have been clicked!");
});
});
代码无效:
$( ".saveBtn" ).click(function() {
alert("You have been clicked");
});
问题:为什么第二个代码片段不起作用?
因为您的保存按钮是动态的。它是在一些点击事件之后创建的。尝试 on
函数而不是 click
$(document).on("click", ".saveBtn", function() {
alert("You have been clicked")
});
您在步骤更改时动态添加按钮,当没有带有 class saveBtn
.
的按钮时,您的事件侦听器将被初始化
$( ".saveBtn" )
returns 什么都没有。
不是删除它并在步骤更改时附加它,而是 hide
和 show
。这样就更好了。
看工作fiddle
这使用初始化 jQuery 个步骤来添加按钮 一次(不是每一步都改变)。
onInit: function (event, currentIndex) {
var saveA = $("<a>").attr("href","#").addClass("saveBtn").text("Save");
var saveBtn = $("<li>").attr("aria-disabled",false).append(saveA);
$(document).find(".actions ul").prepend(saveBtn);
$(".actions").find(".saveBtn").hide();
}
然后在步骤更改中我们只是 show/hide:
onStepChanged:function (event, currentIndex, newIndex) {
if(currentIndex == 2)
$(".actions").find(".saveBtn").show();
else
$(".actions").find(".saveBtn").hide();
return true;
}
它不起作用,因为您正在动态创建按钮,将函数移到此行之后 $(document).find(".actions ul").prepend(saveBtn)
它会起作用。
$(document).find(".actions ul").prepend(saveBtn)
$(".saveBtn").click(function() {
alert("You have been clicked");
});
这是您 fiddle 工作 https://jsfiddle.net/mjyq4oda/5/
的更新
一个关于事件的小故事:
由于带有 class .saveBtn
的按钮是动态创建的,因此它不会在文档加载时进行初始化。但是为了将事件绑定到元素,它们通常需要在启动时进行初始化。但是,当所有事件都已绑定到元素时 ,您的按钮就会创建 。所以你需要做一些叫做事件委托的事情。这意味着您可以在整个文档中收听特定事件。当事件触发时,您查找哪个元素触发了事件。这样甚至可以选择动态创建的元素。一个常用的方法如下:
$(document).on('click', '.saveBtn', function(){
alert("Dynamic button clicked. Hurray!");
});
这样您就可以告诉整个 document
注册 click
事件并将事件源与您的选择器进行比较,在本例中为 .saveBtn
.
我有一个 JQuery FIddle properly running. It uses a JQUERY Steps PlugIn . Now if you run JQuery FIddle 在最后一步你会发现三个按钮 "Save"、"Previous" 和 "Finish"。
如果我点击 Save button
,我想显示一条警告说 "you have been clicked"。如果滚动到 JSFiddle 中 HTML 部分的底部,您将找到以下代码。
代码工作正常:
// on Save button click
$(".actions").on("click",".saveBtn",function(){
alert("You have been clicked!");
});
});
代码无效:
$( ".saveBtn" ).click(function() {
alert("You have been clicked");
});
问题:为什么第二个代码片段不起作用?
因为您的保存按钮是动态的。它是在一些点击事件之后创建的。尝试 on
函数而不是 click
$(document).on("click", ".saveBtn", function() {
alert("You have been clicked")
});
您在步骤更改时动态添加按钮,当没有带有 class saveBtn
.
$( ".saveBtn" )
returns 什么都没有。
不是删除它并在步骤更改时附加它,而是 hide
和 show
。这样就更好了。
看工作fiddle
这使用初始化 jQuery 个步骤来添加按钮 一次(不是每一步都改变)。
onInit: function (event, currentIndex) {
var saveA = $("<a>").attr("href","#").addClass("saveBtn").text("Save");
var saveBtn = $("<li>").attr("aria-disabled",false).append(saveA);
$(document).find(".actions ul").prepend(saveBtn);
$(".actions").find(".saveBtn").hide();
}
然后在步骤更改中我们只是 show/hide:
onStepChanged:function (event, currentIndex, newIndex) {
if(currentIndex == 2)
$(".actions").find(".saveBtn").show();
else
$(".actions").find(".saveBtn").hide();
return true;
}
它不起作用,因为您正在动态创建按钮,将函数移到此行之后 $(document).find(".actions ul").prepend(saveBtn)
它会起作用。
$(document).find(".actions ul").prepend(saveBtn)
$(".saveBtn").click(function() {
alert("You have been clicked");
});
这是您 fiddle 工作 https://jsfiddle.net/mjyq4oda/5/
的更新一个关于事件的小故事:
由于带有 class .saveBtn
的按钮是动态创建的,因此它不会在文档加载时进行初始化。但是为了将事件绑定到元素,它们通常需要在启动时进行初始化。但是,当所有事件都已绑定到元素时 ,您的按钮就会创建 。所以你需要做一些叫做事件委托的事情。这意味着您可以在整个文档中收听特定事件。当事件触发时,您查找哪个元素触发了事件。这样甚至可以选择动态创建的元素。一个常用的方法如下:
$(document).on('click', '.saveBtn', function(){
alert("Dynamic button clicked. Hurray!");
});
这样您就可以告诉整个 document
注册 click
事件并将事件源与您的选择器进行比较,在本例中为 .saveBtn
.