Javascript jQuery切换问题

Javascript jQuery切换问题,javascript,jquery,Javascript,Jquery,我有一个关于使用切换功能的问题。我有一个模板,在AJAX调用结束时使用web服务返回的数据填充该模板。我试图完成的是加载onClick函数,以便在下次单击时显示隐藏的文本框并将其切换为隐藏 发生的事情是,当我点击链接,一旦一切正常,文本框显示和隐藏。但是,如果我继续单击编辑链接,文本框将显示并隐藏该链接已被单击的次数(即,我第二次单击该链接时,它会淡入/淡出两次,第三次淡入/淡出三次,以此类推) 有人能看看我的代码帮我吗 谢谢 另外,我还试图将链接从“编辑”切换到“取消”;我没花太多时间在这件事

我有一个关于使用切换功能的问题。我有一个模板,在AJAX调用结束时使用web服务返回的数据填充该模板。我试图完成的是加载onClick函数,以便在下次单击时显示隐藏的文本框并将其切换为隐藏

发生的事情是,当我点击链接,一旦一切正常,文本框显示和隐藏。但是,如果我继续单击编辑链接,文本框将显示并隐藏该链接已被单击的次数(即,我第二次单击该链接时,它会淡入/淡出两次,第三次淡入/淡出三次,以此类推)

有人能看看我的代码帮我吗

谢谢

另外,我还试图将链接从“编辑”切换到“取消”;我没花太多时间在这件事上,但如果你也想给我一根骨头,我就要了!;-)

所引用元素的结构为:

 <div> 
  <h4>${ProblemSubCategory}</h4>

  <input id="text${ProblemSubCategoryID}" type="text" value=${ProblemSubCategory}   class="scEditHide"/>

  <a href="#" id="${ProblemSubCategoryID}" class="aEdit">Edit</a>
  <a href="dummyWebservice.asmx\DeleteSC\${ProblemSubCategoryID}">Delete</a>
</div>

${ProblemSubCategory}

您正在一次又一次地重复建立“单击”处理程序。调用
.click()
设置处理程序-只需执行一次即可

我还认为:

$(this).text = "Cancel"
应该是

$(this).text("Cancel");

但是我对你的代码感到非常困惑,所以我不确定该建议什么。

关于设置onClick处理程序,Pointy是正确的。现在要做的是向元素添加一个新的处理程序(每次单击时都会触发该处理程序)。这样,第一次单击它时,将添加一个处理程序并启动它。第二次单击时,它将添加另一个处理程序,然后同时启动该处理程序和先前添加的处理程序

你应该把代码改成这样

function showSCs(data) {
    $('#sometmpl3').tmpl(data.d)
    .appendTo($('#subCats'))
    .find(".aEdit")
    .toggle(
        function() {
            $(this).parent().find('.scEditHide').fadeIn();
            $(this).text("Cancel");
            return false;
        },
        function() {
            $(this).parent().find('.scEditHide').fadeOut();
            $(this).text("Edit"); //added: set text back to edit
            return false;
        }
    );
}

正如Pointy提到的,
.toggle()
隐式地将这两个函数分配给
。单击()
处理程序,不需要在
.toggle()
函数中定义事件处理程序。谢谢你,抱歉把你弄糊涂了,我正忙着把自己弄糊涂呢!感谢您的解释和代码更正!我非常感激!
function showSCs(data) {
    $('#sometmpl3').tmpl(data.d)
    .appendTo($('#subCats'))
    .find(".aEdit")
    .toggle(
        function() {
            $(this).parent().find('.scEditHide').fadeIn();
            $(this).text("Cancel");
            return false;
        },
        function() {
            $(this).parent().find('.scEditHide').fadeOut();
            $(this).text("Edit"); //added: set text back to edit
            return false;
        }
    );
}