相关疑难解决方法(0)

检测DOM中的更改

我想在将一些div或输入添加到html时执行一个函数.这可能吗?

例如,添加文本输入,然后应该调用该函数.

javascript dom mutation-observers mutation-events

216
推荐指数
8
解决办法
22万
查看次数

Knockout绑定处理程序拆解功能?

我有一个淘汰绑定处理程序,它使用plupload进行拖放和ajax上传.

要使用plupload脚本,我创建了一个plupload实例,后者又将事件监听器绑定到DOM元素.

这很好.

但是,我有一个"文件夹"列表,当我单击一个文件夹时,我显示该文件夹中的文件列表.我通过使用foreach绑定selectedFolder().文档来重用相同的DOM元素.

我遇到的问题是,在我的绑定处理程序中,我在init函数中执行所有的plupload操作,因为我重用了DOM元素,所以它们会绑定多个事件处理程序.这会导致拖放事件发送到alla处理程序.这意味着如果我将文件放在渲染文件列表中,则drop事件也会触发所有先前渲染的文件列表.

我正在寻找的是绑定处理程序中的某种拆卸或清理功能,这样我可以在文件列表被取消渲染时取消注册所有事件(这是一个单词?).

也许我们无法发现不退却?那我怎么处理呢?我不希望有一个全局实例,因为这会阻止我同时在多个地方使用绑定.

很抱歉没有给你任何代码.我在手机上.

干杯!

javascript knockout.js

24
推荐指数
1
解决办法
5792
查看次数

Backbone.js - 嵌套视图是否应该保持对彼此的引用?

如果Backbone View在其render()方法中创建新视图,那么这些视图是否应该作为数据成员维护?典型的渲染方法如下所示:

render: function() {
  var myView = new MyView({ model: values });
  $('div#value', this.el).append(myView.render().el);
}
Run Code Online (Sandbox Code Playgroud)

这种渲染方法的链接意味着嵌套的视图实际上只是创建,因此它也可以链接任何渲染方法并返回一个构造良好的元素.我假设视图留给垃圾收集?

如果要修改嵌套视图......可能很重要,是应该(重新)创建,还是应该通过数据成员引用进行修改?

我遇到的问题是嵌套的视图接收事件,要求他们修改自己的嵌套视图,有时他们的父视图.

我真的不想在各地开始投掷听众.传递对父视图的引用并从子视图调用render()会导致内存泄漏,因为父视图会创建一个新的子视图,而原始子视图会维护对其父视图的引用!

目前它不像框架那样.有没有人有任何资源可以帮助我以类似框架的方式解决这个问题?

backbone.js

21
推荐指数
1
解决办法
3985
查看次数

javascript内存泄漏

我正在使用jquery并做这样的事情

DOM:

<div id="parent"></div>
Run Code Online (Sandbox Code Playgroud)

JS:

var _doSomeThing = function()
{
    //some codes
}

$(function()
{
    // appending div and binding methods to span
    $('#parent').append('<span>1</span>');
    $('#parent').append('<span>2</span>');
    $('#parent span').bind('click', _doSomeThing);
});

function _clearDiv()
{
    //clear div
    $('#parent').html('');
}

//sometime in future, call clear div
_clearDiv();
Run Code Online (Sandbox Code Playgroud)

现在我的问题是,做绑定事件,DOM然后只是从DOM导致内存泄漏中删除元素?

如果是,如何解决这个问题?

javascript jquery

18
推荐指数
1
解决办法
8764
查看次数

setInterval函数可以自行停止吗?

我有一个jsFiddle得到一个例子来工作.

$().ready(function() {
    $('.test').each(function() {
        $this = $(this);
        $this.data('Worker', function() {
            $('#stop').html((parseInt($('#stop').html()) + 1))
        })
        setInterval($this.data('Worker'), 100);
    });

    $('#stop').click(function() {
        // I want the worker function to stop being triggered here
        $('.test').remove();
    });
});
Run Code Online (Sandbox Code Playgroud)

我想要做的是将一个worker函数附加到DOM中的元素,以便在删除元素时,worker函数停止.

这样的事情可能吗?

jquery

15
推荐指数
2
解决办法
2万
查看次数

remove()函数中的jQuery回调

我需要在从页面中删除DIV后调用一个函数.

我试过添加一个像这样的回调,但没有运气.有什么建议?

$(foo).remove( function() {
   stepb();
});
Run Code Online (Sandbox Code Playgroud)

javascript jquery

10
推荐指数
1
解决办法
1万
查看次数

JavaScript:元素删除事件侦听器

相当于jquery的remove事件监听器的核心javascript是什么

$(element).on('删除', someFunction);

javascript events element listener

8
推荐指数
1
解决办法
1万
查看次数

当元素消失时,onmouseout不会被触发

我有一个mouseover事件触发工具提示; 我希望这个工具提示在移除鼠标时消失.onmouseout效果很好,除非元素消失.

这是一个使用背景更改而不是工具提示的简化示例(因此您可以轻松地运行它):

<div id="bar">
  <div onmouseover="document.bgColor='gray'" onmouseout="document.bgColor='white'" style="border:1px solid black;">
   <span onclick="document.getElementById('bar').innerHTML = ''">Remove me</span>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

问题是这样的:当我点击"删除我"时,我的鼠标不再"超过"div,但是onmouseout不会触发,因为它已经消失了.我想要的是这个例子在我点击"删除我"时恢复到白色背景.

有一个明显的解决方案,我想避免.我不希望删除元素的onclick处理程序手动"修复"文档.这是因为可能有任意多个处理程序可以使用onmouseout删除div.通常,所有鼠标移除和移除处理程序可以动态生成,并且需要彼此了解.为了使事情进一步复杂化,我可能会遇到可移动元素彼此嵌套的情况,并且可以删除其中的任何元素.(我可能会删除此约束,但这需要一些工作.)


以下是一个可行的解决方案示例:在鼠标悬停时,将模态对话注册为"活动"; 然后每当删除元素时,迭代所有模态对话并查找不再在文档中的对话框.但这需要我保持对话的全局存储,并花费时间O(n*m),其中n是活动对话的数量,m是对话在DOM中的深度嵌套.此外,每当我删除元素时,我都需要运行此操作,即使它很明显没有任何影响.

这是另一个可行的解决方案:如果您可以实现onremovedfromdocument事件,那么我们只需将onmouseout处理程序复制为onremovedfromdocument事件,该示例也将正常工作.(我听说jQuery可能支持这个,但我需要与非jQuery代码进行互操作.)

这是另一种可能的解决方案:让每个模态对话重复轮询以查看其父级是否在文档中.如果不是,请让它承诺seppuku.但民意调查真的很难看.(如果没有什么更好的话,我想我会愿意这样做!)

这是另一个想法:使用事件捕获来允许onmouseout元素首先捕获click元素,并设置一个计时器以在点击完成后检查它是否仍在文档中.


作为参考,这是我真正想要做的:我有一个JS小部件,它构建一个复杂的树结构.对窗口小部件的许多编辑涉及单击树中的某个按钮,然后从树中添加或删除(可能删除自身.)但是,某些节点需要更复杂的编辑过程,所以我想提出一个工具提示当用户将鼠标悬停在他们上面时,可以使用说明和可能的更多按钮,或者甚至在用户点击它们时保持对话.但是用户可能会改变主意并决定删除节点或节点的任何父节点,在这种情况下对话应该消失.您可以查看我目前在这里手动创建对话的实现.我想开始使用一个漂亮的工具提示库,但所有这些都有我上面描述的错误.

javascript javascript-events

6
推荐指数
1
解决办法
789
查看次数

如何在 JS/Mootools 中实现 OnDestroy/OnDispose 事件?

JavaScript 中是否存在任何现有的 OnDestroy/OnDispose 事件,或者纯 JS 或 Mootools 中是否存在任何已知的自定义实现?假设我想在元素从 DOM 中销毁/删除时调用 console.log('bye') 。类似于这个jQuery 解决方案的东西

javascript events mootools

6
推荐指数
1
解决办法
4237
查看次数

检测javascript中删除的DOM项目

我正在写一个带有id的插件.它为该id添加了一些代码并启动了一些事件.我发现的问题是,如果容器稍后被覆盖,我找不到关闭事件的方法,因此它们不会继续运行.下面是一个演示脚本,以显示我尝试过的内容.我似乎无法找到检测test2不存在和清除间隔.

$(function() {
				
  /* *********************************
  *  Simple example of something that could be done
  *  being told to work on id test2
  ********************************* */
				
  var a=0;
  $("#test2").append('<br>I Ran');
  var id=setInterval(function() {
    console.log("running");		//ctrl+shift+j will see message every second
  },1000);
					
  //try to remove id test2 is removed
  $(document).on("DOMNodeRemoved", function (e) {
    console.log(e.target.id,e.target);
    if (e.target.id=="test2") { //is never true since test2 was added by jquery
		clearInterval(id);	//stops message from being writen
    }
  })
					
					
  /* *********************************
  *  Some other part of …
Run Code Online (Sandbox Code Playgroud)

javascript jquery

6
推荐指数
1
解决办法
121
查看次数

从Jquery UI中删除项目可排序

我正在尝试找出从JQuery UI可排序列表中删除项目的正确方法.我创建了一个JSfiddle来说明我的问题.

基本上,我有一些围绕JQuery UI可排序窗口小部件的回调,我希望一旦从窗口小部件中删除元素就会执行这些回调.这样做的正确方法是什么?因为"$ .remove"和"$ .detach"似乎都有效.

编辑1:我不是在寻找我的问题的修补程序,而是更多关于JQuery UI可排序列表如何工作的解释,而下面的答案清楚地解决了问题.我不认为这是一种干净的方式.我认为JQuery UI Sortable应该知道当你从两个元素之间的列表中删除一个元素时,你应该需要重新排序

如果你在下面注意,当我在元素上调用remove时,函数不会被执行.

$(document).ready(function(){
    $('ul').sortable({
        stop: function(event, ui) {
            updatePosition();
        }
    });

    $('.remove').on('click', function(e){
        $(".delete").remove();
    });
});

function updatePosition(){
    $('ul li').each(function(i){
        $(this).html(i + 1);
    });
}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/72RTz/2/

jquery jquery-ui jquery-ui-sortable

5
推荐指数
1
解决办法
1万
查看次数

在jquery .on之后执行

我基本上有一个删除东西的按钮,代码是:

$(document).on('click','.btn',function(){
    //code here
    //$t is the item to delete
    $t.remove();
});
Run Code Online (Sandbox Code Playgroud)

我现在想后执行下面的代码removeon已完成:

if($('#bookmarks').is(':empty')){
    $('#bookmarks').css('visibility','hidden');
}
Run Code Online (Sandbox Code Playgroud)

我尝试将其添加到.on:

$t.on("remove", function () {
    if($('#bookmarks').is(':empty')){
        $('#bookmarks').css('visibility','hidden');
    }   
});
Run Code Online (Sandbox Code Playgroud)

但那没用.那么在完全删除项目后如何执行该功能呢?

javascript jquery

0
推荐指数
1
解决办法
58
查看次数