jQuery引用(this)不起作用?

FFi*_*ish 3 jquery css-selectors

我有这个href链接文本"attivo"或"non attivo"
用户可以使用ajax请求$ .post()在数据库中将项目设置为"活动"或"关闭"

我有2个问题:

  1. 我无法获得$(this)的引用工作..我用普通链接尝试了它并且它可以工作,但是如果/ else没有包装?

  2. 如何防止用户在链接上多次单击并提交多个请求?这是一个有效的问题吗?我需要某种小型计时器吗?
    首先,我正在考虑一个javascript确认消息,但这对此功能来说非常烦人.

HTML:

<dl id='album-list'>
<dt id="dt-2">some title</dt>
<dd id="dd-2">
    some description<br />
    <div class='links-right'>status: <a class='toggle-active' href='#'>non attivo</a></div>
</dd>
</dl>

<a class="test" href="#">test</a>
Run Code Online (Sandbox Code Playgroud)

JS:

        $('dd a.toggle-active').click(function() {
            var a_ref = $(this);
            var id = a_ref.parent().parent().attr('id').substring(3);
            if (a_ref.text() == "non attivo") {
                var new_active = "active"; // for db in english
                $.post("ajax-aa.php", {album_id:id, album_active:new_active},
                function(data) {
                    // alert("success");
                    a_ref.text("non attivo"); // change href text
                });
            } else {                
                var new_active = "closed"; // for db in english
                $.post("ajax-aa.php", {album_id:id, album_active:new_active},
                function(data) {
                    // alert("success");
                    a_ref.text("attivo"); // change href text
                });
            }
            return false;
        });     

        $('a.test').click(function() {
            var a_ref = $(this);
            $.post("ajax-aa.php", {album_id:2, album_active:"active"},
            function(data) {
                a_ref.text("changed");
            });
            return false;
        })
Run Code Online (Sandbox Code Playgroud)

Mar*_*ger 5

$(this)应该引用if/else中的一个元素,但不在回调函数内部.回调函数在不同的上下文中运行,因此在回调函数中

    function(date) { }
Run Code Online (Sandbox Code Playgroud)

this不是指一个元素.this回调函数内部与回调函数this外部不同.因为回调函数是一个闭包,它将保持对局部变量a_ref的引用.

要防止用户单击两次,请向该元素添加一个类

  $(this).addClass("hasbeenclicked")
Run Code Online (Sandbox Code Playgroud)

并在单击处理程序中检查是否已设置,并且当它具有以下内容时不执行任何操作:

  if ( ! $(this).is(".hasbeenclicked") ) {
  ....
  }
Run Code Online (Sandbox Code Playgroud)