0

如果将 <a> 放置在 <div id="list"> 之外,我的这段代码效果很好,但当链接放置在目标 div 中时则不行。event.preventDefault() 甚至没有被触发。任何帮助将不胜感激。谢谢!

    <script>
    $( document ).ready(function() {
        $( ".category_link" ).on('click' ,function () {
            event.preventDefault();
            var addressValue = $(this).attr("href");
            function getUrlVars()
            {
                var vars = [], hash;
                var hashes = addressValue.slice(addressValue.indexOf('?') + 1).split('&');
                for(var i = 0; i < hashes.length; i++)
                {
                    hash = hashes[i].split('=');
                    vars.push(hash[0]);
                    vars[hash[0]] = hash[1];
                }
                return vars;
            }
            site_location = getUrlVars()["location"];
            category_id = getUrlVars()["category_id"];
            per_page = getUrlVars()["per_page"];
            request_type = getUrlVars()["request_type"];

            //send the request via ajax
            $.ajax({
                    type: "POST",
                    url: "/test/testing/",
                    data: {site_location : site_location, category_id : category_id, per_page : per_page},
                    dataType: "html"
            }).done(function( msg ) {
                //get the returned message
                $( "#list" ).html(msg);
            }); 

        }); 
    });
</script>



<div id="list">
<a class="category_link" href="/?site_location=testing&per_page=testing&category_id=testing&request_type=testing">Test</a>

4

2 回答 2

2

您将单击处理程序绑定到该a元素。当 ajax 完成时,它会a用一个新元素替换该元素,该元素没有绑定点击处理程序。

改用这个:

$("#list").on('click', '.category_link', function (event) {

该版本on()使用事件委托,并使用动态元素。

参见on(),尤其是关于直接事件和委托事件的部分。

(请注意,您应该添加event参数。有些浏览器不关心,有些浏览器不关心。)

于 2013-09-25T18:01:11.617 回答
1
$( ".category_link" ).on('click' ,function ()

category_link如果动态添加到#list容器中,则不会触发此事件。您必须处理事件委托,如下所示。

将您的上述事件替换为

$("#list").on('click', '.category_link', function (event)

注意:event.preventDefault()如果你在你的函数中传递它,就像上面一样

于 2013-09-25T18:01:31.177 回答