【问题标题】:X-Editable Bootstrap field loads only on the first linkX-Editable Bootstrap 字段仅在第一个链接上加载
【发布时间】:2015-10-24 03:18:46
【问题描述】:

我正在使用Bootstrap X-Editablebootstrap-wysihtml5

我在每个帖子页面上都有一个评论列表,每个评论下都有一个编辑链接。

但我只能在最后一条(最新提交的评论)上编辑第一条评论,其余的根本不加载 X-Editable 字段。

            $('#note').editable({
                validate: function(value) {
                    if($.trim(value) == '')
                        return 'Value is required.';
                },
                type: 'wysihtml5',
                title: 'Edit Comment',
                placement: 'top',
                send:'always',
                ajaxOptions: {
                    dataType: 'json',
                    type: 'post'
                }
            });
            $('#pencil').click(function(e) {
                e.stopPropagation();
                e.preventDefault();
                $('#note').editable('toggle');
            });

还有 HTML

<div id="note" 
     class="note" 
     data-type="wysihtml5" 
     data-toggle="manual" 
     data-pk="{{ $each_comment->id }}" 
     data-placement="top" 
     data-url="{{ url($each_comment->post_id . '/comment/update') }}">
    {!! $each_comment->comment !!}
</div>

<a href="#" 
   id="pencil" 
   class="pencil" 
   data-type="wysihtml5" 
   data-toggle="manual" 
   data-pk="{{ $each_comment->id }}" 
   data-placement="top" 
   data-url="{{ url($each_comment->post_id . '/comment/update') }}">
<i class="icon-pencil" style="padding-right: 5px"></i>[edit]
</a>

更新

我做了一些更改,我在编辑链接中添加了一个pen

&lt;a href="#" id="pencil" class="pen" data-pk="{{ $each_comment-&gt;id }}"&gt;[edit]&lt;/a&gt;

我用a.pen调用它

('a.pen').click(function(e) {
    e.stopPropagation();
    e.preventDefault();
    console.log($('#note').attr("data-pk"));
    $('#note').editable('toggle');
});

现在所有编辑链接都在加载 X-Editable 字段,但它们都显示相同的评论,ID 142 是最新提交的评论。

console.log 在我点击编辑链接时打印相同的 id。

【问题讨论】:

    标签: javascript jquery html ajax twitter-bootstrap


    【解决方案1】:

    $('#note').editable( 看来,您正在动态生成具有重复id 的内容。

    id 选择器总是返回第一个匹配项,因为规则是,id 在文档中应该是唯一的。

    您应该使用classname 或允许重复的类似属性,而不是id

    所以使用class 代码应该如下所示:

    $('.pencil').click(function(e) {
       e.stopPropagation();
       e.preventDefault();
       $(this).prev('.note').editable('toggle');
     });
    

    【讨论】:

    • 如果我使用$('.note').editable(),它将开始加载不属于我的 cmets,其余的编辑链接会打开,但它们都会加载不属于我的评论。
    • 你的新 sn-p 在控制台中给了我这个错误Uncaught TypeError: this.prev is not a function
    • 这禁用了所有的编辑链接,没有一个打开,甚至第一个评论也没有。
    • 我有 data-pk 是独一无二的动态的,我可以用它来代替 id 吗?
    • 是的,您可以使用data-* 属性。如果您可以使用您的代码创建堆栈 sn-p/jsfiddle 或其他内容,我可能会为您提供帮助
    猜你喜欢
    • 2013-09-03
    • 2014-11-16
    • 2018-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多