1

在下面的代码块中,我想调用event.preventDefault中的a标记.ul li,以便在单击任何列表元素时,a标记不应重定向到其href属性中的页面。我尝试这样做$this.find("a").preventDefault();,但这会导致错误。我该怎么做呢?

$(document).ready(function () {
    $(".ul li").on("click", function () {
        var $this = $(this);
        $this.find("a").preventDefault();

        // switch all lists off 
        $(".selectedList, .checkedList").removeClass("selectedList, checkedList");
        // switch this list on  
        $this.addClass("selectedList, checkedList");
    });
});
4

6 回答 6

2

您可以在事件对象而不是元素上使用event.preventDefault 。DOM您可以通过将事件单击事件添加到 a 并调用preventDefault

$(".ul li a").click(function(event){    
     event.preventDefault();    
});
于 2013-03-21T11:25:29.527 回答
2
$(".ul li a").on("click", function(e)
{
    var $this = $(this);
    e.preventDefault();

    $(".selectedList, .checkedList").removeClass("selectedList, checkedList");
    // switch this list on  
    $this.parent().addClass("selectedList, checkedList");//or parents('li')
});

并最终使用.parentifa是直接子级li或用于.parents('li')添加classparent li.

或者

closest('li')会正常工作。

于 2013-03-21T11:26:32.800 回答
1

您需要在事件对象中调用preventDefault()

我认为 addClass 用法也是错误的,,如果要添加/删除多个类,类名之间不应该有任何

$(document).ready(function() {
        $(".ul li a").on("click", function(e) {
            var $this = $(this);
            e.preventDefault();

            // switch all lists off 
            $(".selectedList, .checkedList").removeClass("selectedList checkedList");
            // switch this list on  
            $this.addClass("selectedList checkedList");
        });
    });
于 2013-03-21T11:25:15.173 回答
0

你需要传递事件对象. preventDefault()是事件。

$(document).ready(function() {
        $(".ul li").on("click", function(evt) {
            var $this = $(this);
            evt.preventDefault(); // this should be like this. 

            // switch all lists off 
            $(".selectedList, .checkedList").removeClass("selectedList, checkedList");
            // switch this list on  
            $this.addClass("selectedList, checkedList");
        });
    });
于 2013-03-21T11:25:45.313 回答
0

您应该只将 a 元素用于单击事件

$(document).ready(function() {
    $(".ul li a").on("click", function( e ) {
        var $this = $(this);
        e.preventDefault();

        // switch all lists off 
        $(".selectedList, .checkedList").removeClass("selectedList, checkedList");
        // switch this list on  
        $this.parent( 'li' ).addClass("selectedList, checkedList");
    });
});
于 2013-03-21T11:26:06.987 回答
0

.preventDefault()函数属于event作为第一个参数传递给事件处理函数的 jQuery 规范化对象。只需在匿名函数上为参数指定名称并使用它:

$(document).ready(function() {
    $(".ul li").on("click", function(event) {
        var $this = $(this);
        event.preventDefault();

        // switch all lists off 
        $(".selectedList, .checkedList").removeClass("selectedList checkedList");
        // switch this list on  
        $this.addClass("selectedList checkedList");
    });
});

由于事件冒泡click,在元素上触发的任何事件<a>也应由此事件处理程序处理。另请注意,使用.addClass()and.removeClass()函数时,类名列表是空格,而不是逗号,分隔 - 它不应该是"selectedList checkedList""selectedList, checkedList"除非您的类是selectedList,.

于 2013-03-21T11:26:36.087 回答