我有这样的代码
<a id="id101" href="javascript:func1();" onclick="return func2();">Link</a>
func2返回true或false。然后,仅当function2返回true时才调用func1。对吗?
在学习jquery时,我发现onclick不好并且折旧了,所以我将上面的代码修改为
<a id="id101" href="javascript:func1();">Link</a>
jquery
$("#id101").click(func2() {
//same stuffs from before which was in func2
});
现在,我的问题是:
点击处理程序后,href中的JavaScript怎么办?如果func2中的条件为真,我应该在func2的jQuery单击处理程序中调用func2内的func1吗? 还是有一些优雅的解决方案?
另外,分离html和事件代码是好的,但是这个id为id101
的元素可以有很多与之关联的事件,而在大文件中,可能有很多html元素包含很多事件。所以,当我有一个包含许多事件处理程序的大页面时,我怎样才能更好地了解哪个html元素具有哪些以及与之相关的事件数量?
根据要求对上述问题做出更多解释,
我的意思是id101可以有onclick,onmouseover,onmouseout和许多其他类似的事件。可以有许多这样的元素具有许多这样的事件处理程序。我怎样才能更好地发现它们?在旧式中,所有这些事件处理程序都放在一起,就像这样
<a id="id101" href="javascript:func1();" onclick="return func2();">Link</a>
。
我不是说这很好,但至少我可以看到它有这个onclick事件。但是现在当把它分成jquery文件时,我必须先搜索这个jquery文件id101,然后检查与之关联的事件,这可能是html文件有很多元素和相关事件处理程序的问题。有没有更好的方法来找到这些信息?
答案 0 :(得分:10)
如果我理解正确,您希望避免使用内联Javascript,但您还希望能够浏览a
并知道它是否绑定了一个事件。不幸的是,没有一种可接受的方式来表示这一点,因为内联Javascript是坏消息。也许你可以给你的元素一个虚拟课程,以帮助你将来的可读性。除此之外,忘记整个func1
和func2
的事情。只需在点击绑定中使用匿名函数即可。
<a id="some_id" class="optional_has_click">Click Me</a>
<script type="text/javascript">
$(document).ready(function(){
$("#some_id").click(function(){
// do something
alert( $(this).attr("id") );
});
});
</script>
编辑:此外,删除href
会删除视觉提示,因此您可以使用虚拟类使其看起来像a
。
这是一个小提琴:http://jsfiddle.net/zzTSt/1/
答案 1 :(得分:2)
是的,我建议你在func2里写func1。 HTML:
<a id="id101" href="#" >Link</a>
的jQuery
$("#id101").click(func2() {
var status = false;
//func2 goes here and modifies status value.
if (status) {
// func1 goes here
} else {
// in case if status is false.
}
});
此外,我在你的问题的第二部分中没有明白你的意思,请你更具体一点。
答案 2 :(得分:2)
我能告诉你的最好的是这是“臭”代码 - 你不希望你的javascript遍布这样的地方。我建议你花几个小时学习一些jQuery基础知识并从那里开始。我知道这可能令人沮丧,特别是如果你正在使用传统的javascript。