用“var _this”传递$(this)

时间:2014-02-23 21:13:13

标签: jquery this

得到他的代码,简单的任务:

1.单击列表项 2.get列表项值 输入输入 4.手动更改它们 5.按klick

将它们保存回列表项

点击多个列表项并保存后,这些值也会针对之前已被点击的所有列表项进行更改。

似乎“_this”正在保存所有连接。

知道如何使这项工作?非常感谢!

<ul id="foo">
    <li>
        <a href="#" class="bar"></a>
        <span class="name">Name1</span>
    </li>
    <li>
        <a href="#" class="bar"></a>
        <span class="name">Name2</span>
    </li>
    <li>
        <a href="#" class="bar"></a>
        <span class="name">Name3</span>
    </li>
</ul>

<input id="editName">
<a id="save"></a>


$("#foo").on('click', '.bar', function() {      

    _this = $(this);
    edit(_this);
    });

function edit(_this) {

    var name = _this.parent().children(".name").text();
    $("#editName").val(name);

    $("#save").click( function() {
        _this.parent().find(".name").text(  $("#edit input#editName").val()  );
        });

    };

1 个答案:

答案 0 :(得分:1)

每次编辑(_this)时都会调用你绑定一个新的委托,然后让这个方法调用3次...下次你按'#save'你会得到三个不同的委托调用。 要解决此问题,您可以添加一个变量来获取_this值并保留它:

var _thisglobal='';

从编辑(_this)中取出biding函数并使用全局值_thisglobal而不是_this:

function edit(_this) {
    _thisglobal=_this;
    var name = _this.parent().children(".name").text();
    $("#editName").val(name);



    }; 

$("#save").click( function() {
        _thisglobal.parent().find(".name").text(  $("#edit input#editName").val()  );
        });