0

我上周提交了这个问题:

chrome 不能与 jquery remove 一起使用

并且能够解决它(我真的很愚蠢),但是我的例子非常简单。目前,我正在尝试.remove在将输入数组发送到 ajax 函数之前从页面中消除完整的 div。但是,我根本无法.remove上班。

这是我的最新尝试:http: //jsfiddle.net/CJ2r9/2/

我在多个浏览器上的 jsfiddle 上没有定义函数。在我的应用程序中,我绝对没有错误,但也没有任何效果。

我对javascript范围比较陌生,所以如果问题是范围方面的,那么请让我知道我是怎么搞砸的。

我也尝试过使用.onjquery 函数,但考虑到我的 div id 是从服务器动态加载的(jstl、spring MVC 等),这有点令人困惑。如果这是一个解决方案,请告诉我如何才能走上正轨。

谢谢!

4

3 回答 3

1

我看到您已经在使用 jquery。你为什么不这样做:

<div id="foo">This needs to be removed</div>
<a href="#" id="remove" data-remove="foo">Remove</a>

function removeElem(element){
    $('#'+element).remove();
}

$(function(){
    $("#remove").click(function(){
        removeElem($(this).data('remove'));
    });
})

在这里小提琴:http: //jsfiddle.net/vLgpk/

他们的工作方式是,使用data-remove(可以是任何像 data-xyz 顺便说一句),将删除链接与 div 绑定。然后,您可以稍后在单击删除时阅读此绑定。

如果您是 jQuery 的新手,并且想知道data-remove它是什么,它只是您可以添加到代码中的自定义属性,以后可以使用data()对元素的调用来检索它。许多像 Bootstrap 这样的优秀框架都使用这种方法。

在我看来,使用这种方法的好处是你可以在你的 UI 中的任何地方都有删除链接,并且它们不需要在结构上与你的 div 相关,因为它们位于它们内部。

于 2013-08-06T16:07:34.820 回答
1

您的 jsFiddle 中的两个问题是:

  • 范围:removeElem不在全局范围内,因为您保留了默认配置选项以在 DOM 上执行代码准备就绪。您可以将其更改为“不换行”以使功能全局化。

  • 您要删除的元素不存在。div 元素具有类似“removeXXXp”的 ID,并且在您的事件处理程序中传递“removeXXXs”。


这是另一个更简单的元素删除解决方案(在我看来)。鉴于您的标记:

<div class="scheduleSet" id="remove315p">
    <!-- ... -->
    <a href="javascript:void(0);" class="optionHide">Remove</a>
</div>

你可以.on这样使用:

$('.schduleSet a.optionHide').on('click', function() {
    // traverses up the DOM tree and finds the enclosing .schduleSet element
    $(this).closest('.scheduleSet').remove();
});

你甚至根本不需要身份证。

于 2013-08-06T16:10:30.960 回答
1

我做了一个简单的小提琴,内联onclick没有看到在 javascript 中定义的函数,所以我得到了一个ReferenceError: myRemove is not defined.

通过在js中添加监听器,.remove()工作正常。

抱歉,我不知道是什么导致了行为差异。

测试一下:http: //jsfiddle.net/xTv5M/1/

// HTML5
<div id="removeme">foo bar</div>
<button onclick="myRemove('removeme')">Go</button><br>
<div id="removeMe2">foo bar</div>
<button id="go2">Go Again</button>

// js
function myRemove(name){
    $('#'+name).remove()
};

$('#go2').click(function(){ myRemove('removeMe2') });
于 2013-08-06T16:12:38.947 回答