每个函数中的 jQuery onclick 事件

标签 jquery each

我正在尝试将透明层附加到某些元素,其中包含编辑按钮。编辑按钮有一个 onclick 函数。通过 onclick 传输的值是来自父元素(透明层附加在其上)的 ID

我的问题是,不幸的是所有编辑按钮都带有相同的值:cms-block-3。

我做错了什么?

我希望我能正确地解释自己。提前致谢!

HTML 示例:

<div class="editable cms-block-1">Some</div>
<div class="editable cms-block-2">Someting else!</div>
<div class="editable cms-block-3">Something else else! :)</div>

$(document).ready(function() {
    $('.editable').each(function(index) {

        $($(this).attr('class').split(' ')).each(function() { 
            if (this !== '' && this.substring(0, 3) == "cms") {
                element = this.toString();
            }
        });

        var $t = $(this);
        var offset = $t.offset();
        var dim = {
            left:    offset.left, 
            top:    offset.top, 
            width:    $t.outerWidth(), 
            height:    $t.outerHeight()
        };

        $('<div class="editable-focus"></div>').css({
            position:    'absolute', 
            left:        dim.left + 'px', 
            top:        dim.top + 'px',
            width:        dim.width + 'px',
            height:        dim.height + 'px'
        }).appendTo(document.body).append('<input type="button" value="Edit" class="edit-btn" onclick="edit_area(element)" />');
    });
});

最佳答案

使用此代码,您的按钮 HTML 最终将成为字面上

<input type="button" value="Edit" class="edit-btn" onclick="edit_area(element)" />

根据你的描述,它应该是这样的

<input type="button" value="Edit" class="edit-btn" onclick="edit_area('some_id')" />

但话又说回来,您的可编辑 div 没有 id,因此对于当前的 HTML,这也不起作用。

除此之外,您的问题是,通过编写 element,您实际上引用了 window.element,它返回分配给它的最后一个值。

修复方法如下:

$('.editable').each(function(index) { 
    var element; // ADD THIS TO MAKE element A LOCAL VARIABLE

    // [...]

    var $button = $('<input type="button" value="Edit" class="edit-btn" />');
    $('<div class="editable-focus"></div>').css({
        position:    'absolute',
        left:        dim.left + 'px',
        top:        dim.top + 'px',
        width:        dim.width + 'px',
        height:        dim.height + 'px'
    }).appendTo(document.body).append($button);

    // And now you can write your event handler without fuss like this:
    $button.click(function() { alert(element); });

<强> See it in action

关于每个函数中的 jQuery onclick 事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8836382/

相关文章:

javascript - $.each jquery 循环在 getJSON 请求后为每个元素打印一个 "undefined",网格数据完美打印

javascript - coffeescript,jquery中的每个循环

javascript - 将对象属性添加到表头并将对象属性值添加到表行

javascript - Focus Rails3 上的只读文本输入

jquery - 在许多事件上调用相同的函数

java - 如何在 Java 中实现 Ruby 的 ".each"方法?

javascript - 使用 jquery .post() 发送所有输入字段

javascript - 为什么当我传入不同的对象时,AJAX 会向回调返回相同的数据?

jQuery - 嵌套each() 的问题

html - thymeleaf 中的for循环