【问题标题】:Nested function in jQueryjQuery中的嵌套函数
【发布时间】:2015-05-24 08:21:39
【问题描述】:

我是 javascript 和 jQuery 的新手。我正在编写以下代码来编辑我的网页的一部分。当我第一次单击#edit_case 但单击#cancel 后它返回我回来时,它工作得很好。 #edit_case 不起作用.. 这段代码有什么问题?

$("#edit_case").click(function(){  

    var oldHTML = $("#editable").html();
    var newHTML;

    newHTML = "<div class='panel-body' id='edit_fields'></div> <div class='panel-footer' id='footer-bottons'></div>"
    $("#editable").html(newHTML);
    $('#footer-bottons').html('<div class="text-right"><button class="btn btn-primary btn-sm" id="save">Save</button> <button class="btn btn-default btn-sm" id="cancel">Cancel</button></div>');

    $("#cancel").click(function(){  

        $("#editable").html(oldHTML);

    });
});

我的 HTML 标记如下:

 <div class="panel panel-default" id="editable">
     <div class="panel-body">
         Drop-down code 
         <li><a id='edit_case'>Edit</a><li>

         Panel-Body Code... 

     </div>
Panel footer
</div>

当我单击编辑时,会出现与 stackoverflow.com 上相同的文本输入字段。第一次,编辑链接工作正常,但当我取消编辑时,编辑和删除都不起作用。我认为单击事件没有发生,因为我也尝试使用警报('test')对其进行检查,并且单击#cancel 后它没有出现。这是解除绑定事件的问题吗?如果是,我将如何纠正?

【问题讨论】:

  • 点击取消按钮后是否还有id为edit_case的元素?
  • 这是什么意思:“让我回到领域之外”。另外,“#edit_case 不起作用.. 这段代码有什么问题?” 你还没有告诉我们它应该做什么,所以我们很难告诉你哪里出了问题用它。
  • 感谢 cmets...我已经添加了更多详细信息..
  • @HassanSaqib 我的答案已更新。干杯!

标签: javascript jquery nested-function


【解决方案1】:

由于取消按钮最初不在 dom 中,并且由于您要删除 edit_case,因此您需要使用“.on”将此代码放入加载中,而不是单击事件中。如果你把它放在点击事件中,你将有多个事件将被注册。

使用工作小提琴: https://jsfiddle.net/2hjr6g94/

$(document).on('click','#cancel',function(){  
        $("#editable").html(oldHTML);
    });

var oldHTML = $("#editable").html();

$(document).on('click','#edit_case',function(){  
    var oldHTML = $("#editable").html();
    var newHTML;

    newHTML = "<div class='panel-body' id='edit_fields'></div> <div class='panel-footer' id='footer-bottons'></div>"
    $("#editable").html(newHTML);
    $('#footer-bottons').html('<div class="text-right"><button class="btn btn-primary btn-sm" id="save">Save</button> <button class="btn btn-default btn-sm" id="cancel">Cancel</button></div>');

});

【讨论】:

  • 这是真的,我没想到。或者您可以使用“实时”活页夹,不是吗?
  • 此解决方案也没有效果。
  • @HassanSaqib 我建议您删除 id 选择器并改用类选择器。由于您要添加动态信息,因此您的代码可以多次使用。不确定它是否能解决您的问题,但是...您可以添加一个 jsfiddle 吗?
  • 我已经用一个工作小提琴和所有代码更新了答案。您还缺少“edit_case”上的 .on,因为它已被删除并稍后在 DOM 中添加
【解决方案2】:

运行一次后,新的html在“oldHtml”的变量值中。您需要将旧 HTML 存储在此功能之外,以便保留它。

这是你现在正在做的过程:

  1. 获取 html。
  2. 加载新的 html。
  3. 获取 html(现在是新的 html)。
  4. 加载 oldHtml(还是新的 html)。

oldHtml 每次调用此函数时都会被覆盖和存储。

【讨论】:

  • 感谢凯西的回复。 oldHtml 在我的情况下是保留的。我已经添加了更多详细信息..
猜你喜欢
  • 2012-02-23
  • 1970-01-01
  • 2018-03-13
  • 2011-09-04
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
  • 1970-01-01
  • 2023-03-10
相关资源
最近更新 更多