我从开发人员处获得了一些离开我们公司的代码。他写了一个内联函数,看起来像这样:
<button class="xxx" id="MyID" type="button" onclick="javascript: $('#openThis').slideToggle('slow');">btnText</button>
我试图将其删除并将其放入另一个函数中以编写回调,以便在可见时滚动到切换区域。
$("#MyID").click(function () {
$("#openThis").slideToggle("slow");
});
但我似乎无法让它发挥作用。我做错了什么?
答案 0 :(得分:2)
您是在DOM上创建对象之前还是之后添加侦听器?
因为如果你试图绑定那个onclick函数而不等待文档准备好就没有对象来创建监听器。
这样的事情可以起作用:
$(document).on('ready', function() {
$("#MyID").click(function () {
$("#openThis").slideToggle("slow");
});
});
答案 1 :(得分:1)
如果您动态添加按钮,请使用on
代替
将一个或多个事件的事件处理函数附加到 选定的元素。
事件处理程序仅绑定到当前选定的元素;他们 在您的代码调用.on()
时必须存在
//Instead of document you can use a container id
$(document).on('click',"#MyID",function () {
$("#openThis").slideToggle("slow");
});
此方法的作用是将事件添加到当前选定的元素document
,并将event
委托给您的选择器,在这种情况下为#MyID
。
委派事件的优势在于它们可以处理来自的事件 稍后添加到文档中的后代元素。
答案 2 :(得分:0)
$(document).on('click', '#myBtn', function(){
$('#foo').slideToggle('slow');
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<div id="foo">content</div>
<button id="myBtn">Click me</button>
答案 3 :(得分:0)
您想要滚动到该区域,请从按钮中删除JavaScript
你需要做这样的事情
$("#MyID").click(function() {
$('html, body').animate({
scrollTop: $("#openThis").offset().top
}, 2000);
$("#openThis").slideToggle("slow");
});
答案 4 :(得分:-2)
你应该删除onclick =&#34;&#34;按钮标记和javascript中的属性:
$("#MyID").click(function (e) {
e.preventDefault();
$("#openThis").slideToggle("slow");
});
使用防止默认值。 希望有所帮助