无法注册onclick事件处理程序

时间:2011-11-10 13:17:39

标签: jquery

我是jquery的新手,并尝试使用它。我想在锚链接上注册一个onclick事件,并避免将其带到下一页。为此,我写了以下内容。

<html>
<head>
    <script src="//ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js" type="text/javascript"></script>
    <script type="text/javascript">
        $(function() {
            $('li > a').onclick = hitme;
        });
        function hitme() {
            alert('You will not be able to go to the next page!!!');
            return false;
        }
    </script>
</head>
<body>

<h1>My First Heading with JQuery</h1>

<p>This is homepage wireframe!!!</p>
<ul>
    <li><a href="http://google.com">Click me and go to google!!!</a></li>
</ul>

</body>
</html>

我在这里做错了什么?

更新

我将脚本从onclick更改为click,但在页面加载时将我带到下一页。我尝试使用event.stopPropogation和event.defaultPropogation但它无法正常工作,这是我的更新代码:

<script type="text/javascript">
        $(function() {
            $('li > a').get(0).click (function(event){
                hitme();
                event.preventDefault();
                return false;
            });
        })
        function hitme() {
            alert('You will not be able to go to the next page!!!');
        }
</script>

我在做什么蠢事?

7 个答案:

答案 0 :(得分:4)

.onclick是DOM对象的属性,而不是jQuery对象。

请尝试以下任一方法:

$(function() {
    $('li > a').each(function() { this[0].onclick = hitme; });
});

$(function() {
    $('li > a').click(function() { return hitme(); });
});

答案 1 :(得分:1)

您可以随时查看jQuery文档:http://api.jquery.com/click/

$(function() {
  $('li > a').onclick = hitme;
});

应该是

$(document).ready(function() {
  $('li > a').click(function(){
    hitme()
  });
});

然后尝试这样的事情:http://api.jquery.com/event.stopPropagation/

答案 2 :(得分:1)

我认为onclick是Javascript; click()事件是jQuery特定的等价物:

$('li > a').click(hitme);

或者,如果您的函数不被接受作为参数参数(无论出于何种原因):

$('li > a').click(function() {
    hitme();
});

答案 3 :(得分:0)

尝试以下

    $(selector).click(function(event){
    //for preventing default behaviour on which click is performed
    event.preventDefault();
    });

如果要在on fly

上创建的元素上注册click事件,请使用jquery live方法
    $(selector).live('click',function(event){
    //for preventing default behaviour on which click is performed
    event.preventDefault();
    });

答案 4 :(得分:0)

你可以尝试这样的事情

$('li a').click(function (event) {
 alert('i am clicked and not navigated');
 event.preventDefault();
 return false;
});

答案 5 :(得分:-1)

使用$('li > a').click(hitme);

答案 6 :(得分:-1)

我不会在这里做出太多贡献,因为已经说过了。但为了荣耀,我怀疑正确的语法应该是:

    $(document).ready(function() {
            $(".mytarget").click(function({
                    hitme();
            });
    });

不要忘记document.ready,因为如果页面加载缓慢且某个事件发生时尚未加载div,则可能会遇到错误。

另外,使用li&gt;以我的拙见,一个坏主意。给你的目标元素一个类并坚持下去,因为:

A)否则你的代码可能会影响你没想到的其他元素。

B)JQuery读取DOM的方式有效,这里你的代码将在你的页面中查找所有“li”,然后是所有具有“a”作为孩子的li。使用类甚至更好的,尽可能使用id,将加快这个过程,因为你的类将被jquery直接定位,而不是检查所有类似的元素。