【问题标题】:Using jQuery to remove html elements from a dropdown使用 jQuery 从下拉列表中删除 html 元素
【发布时间】:2015-12-15 16:34:03
【问题描述】:
<script>

    $(document).ready(function() {
        $('.notification .tools .remove').on('click', function () {
            alert('hola');
            $(this).parentsUntil('.notification').remove();
        });
    });


</script>

<div id="notification-list" class="notification-chain" style="display:none">

    @foreach ($notifications as $notification)

    <div class="notification" style="width:300px">

        <div class="tools">
            <a href="javascript:;" class="remove"></a>
        </div>

        <div class="notification-messages">

            <div class="message-wrapper">

                <div class="heading">{{ $notification->name }}</div>
                <div class="description">{{ 'User ' .$notification->points_to. ' ' .$notification->content }}</div>
                <div class="date pull-left">{{ $notification->created_at }}</div>

            </div>

            <div class="clearfix"></div>

        </div>

    </div>

    @endforeach

</div>

各位读者,

以上是我目前正在使用的。它显示一个下拉列表来保存用户收到的所有通知,我目前在每个“通知”div 的顶角都有一个 x

然而,上面的 jQuery 似乎都没有运行。警报不会显示,我在控制台中什么也得不到。

请随意嘲笑我并告诉我我做错了什么愚蠢的事情。

非常感谢。


感谢所有的帮助。

以下是一些具有更广泛上下文的 laravel.io 文件:

完整的 html: http://laravel.io/bin/Nk4xP

下拉列表的js: http://laravel.io/bin/9vn1O#

【问题讨论】:

  • 你错过了parentsUntil('.notification')的课程
  • @LukeVincent 仅供参考,您可以单击 Chrome 的 F12 中的源选项卡以放置断点并添加监视以更好地了解您的 javascript/jquery 中发生了什么。
  • @gaynorvador 这真的很有用我不知道你可以用 chrome 设置断点。从外观上看,它甚至从未通过选择器。
  • @PauloPedroso - 你指的是模板标签吗? {{ }} - 这也是 Laravel 刀片模板引擎的语法。
  • @Kryten 是的,经过仔细检查后我注意到了。我删除了我无用的评论。 :-) 但是我已经在下面发布了我的测试,删除了 javascript 工作的 Laravel 东西。请参阅小提琴的链接。

标签: javascript php jquery css laravel-5.1


【解决方案1】:

这里有一些调试技巧:

想想所有可能出错的事情,然后开始排除它们。例如:

  1. 可能根本没有加载 jQuery。

  2. 可能事件处理程序的选择器不正确,jQuery 找不到将事件处理程序附加到的元素。

  3. 可能您的$(document).ready() 函数中的代码没有执行,并且从未设置事件处理程序。

结合更改代码和浏览器控制台,您可以排除以下三件事:

jQuery 加载了吗?打开控制台并输入$ - 如果它显示undefined,那就是你的问题。

元素的选择器是否不正确?打开控制台并输入$('.notification .tools .remove')。如果你得到一个空数组,那就是你的问题。作为一个额外的好处,如果您将鼠标悬停在 Chrome(可能还有其他浏览器)上,它会突出显示选定的元素 - 如果您选择的元素与您预期的不同,这很有用。

$(document).ready() 代码是否正在执行?在函数顶部粘贴一个不同的alert,看看它是否会在您重新加载页面时触发。

一次解决此类问题很重要 - 如果您同时更改两个或更多内容,并且问题消失(或出现新问题),会发生什么情况?您将不知道是哪一个解决了问题或导致了问题!

【讨论】:

  • 这是一个很好的回应,谢谢。自发布以来,我已经做了几件事。首先从下拉列表中删除“通知” div 并将其放置在页面的其他位置已证明它在外部有效。它似乎只有在下拉菜单中才会中断。我也照你说的做了,在控制台中输入了选择器。一个数组填充了预期的元素数量,但是当我将鼠标悬停在它们上方时,只有下拉列表之外的元素会突出显示。
  • 有趣... jQuery 是否有可能没有将事件处理程序附加到带有display: none 的元素?我从来没有听说过这种行为......是时候尝试一下了:-)
【解决方案2】:

我能够让它在下面的小提琴中工作。 我删除了 display:none (所以我可以看到 div)和非 html 字符。尝试查看浏览器控制台(Linux 和 Windows 计算机中的 F12)并查看是否有错误。 Javascript 错误将阻止进一步的代码运行。

我还在 a href 标记中放了一段文字

<a href="javascript:void()" class="remove">remove</a>

https://jsfiddle.net/m9rktusb/

【讨论】:

    【解决方案3】:

    由于通知是div的一个类,所以类前面应该有一个点作为选择器,如下所示:

    $(this).parentsUntil('.notification').remove();
    

    希望这行得通。

    【讨论】:

    • 抱歉,这是一个愚蠢的错字。我已经进行了更改,但毫不奇怪它并没有解决问题,因为警报没有触发,所以在此之前它失败了。
    【解决方案4】:

    Luke,你能给我们看看最终的 HTML 吗? 代码运行完美,所以问题应该出在其他地方。 https://jsfiddle.net/z7958hx7/1/

    $(document).ready(function() {
       $('.notification .tools .remove').on('click', function() {
            alert('hola');
            $(this).parentsUntil('.notification').remove();
        });
    });
    

    【讨论】:

    • 我已将完整的 html 添加到 laravel.io pastebin 并提供了链接
    • @LukeVincent 抱歉回复晚了。我说的是完整的 html 输出(刀片生成的渲染 html):)。我可能是错的,但我认为这个问题可能会阻止页面完成加载。卢克你能试试这个解决方案吗? laravel.io/bin/PXJ5z 如果这不起作用,你可能在其他地方有一个 js 错误:/(对不起我的英语 O:))
    猜你喜欢
    • 1970-01-01
    • 2011-01-04
    • 1970-01-01
    • 1970-01-01
    • 2015-10-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多