4

我在 jQuery 中有一个模态框,我创建它来显示一些嵌入代码。我希望脚本采用id单击的链接,但我似乎无法使其正常工作。

有谁知道我该怎么做或为什么会发生这种情况?

我的 jQuery 代码是:

function generateCode() {
    var answerid = $('.openembed').attr('id');
    if($('#embed input[name="comments"]:checked').length > 0 == true) {
        var comments = "&comments=1";
    } else {
        var comments = "";
    }
    $("#embedcode").html('<code>&lt;iframe src="embed.php?answerid=' + answerid + comments + '" width="550" height="' + $('#embed input[name="size"]').val() + '" frameborder="0"&gt;&lt;/iframe&gt;</code>');
}

$(document).ready(function () {
    $('.openembed').click(function () {
        generateCode();
        var answerid = $('.openembed').attr('id');
        $('#box').show();
        return false;
    });
    $('#embed').click(function (e) {
        e.stopPropagation()
    });
    $(document).click(function () {
        $('#box').hide()
    });
});

我的标记是:

<a href="#" id="7830" class="openembed">Embed</a>
<a href="#" id="9999" class="openembed">Embed</a>
4

6 回答 6

12

你的问题在这里:

$('.openembed')

返回匹配元素的数组。您应该只选择单击的元素。 $('.openembed')如果您将click事件分配给具有此类的所有元素,则可以正常工作。但另一方面,您无法知道点击了哪个。

但幸运的是,在处理函数体中 click 你可以调用$(this).

$(this)将返回当前(和单击的元素)。

// var answerid = $('.openembed').attr('id'); // Wrong
var answerid = $(this).attr('id');   // Correct
// Now you can call generateCode
generateCode(answerid);

另一个错误是generateCode函数体。在这里,您应该传递所选元素的 id。这是正确的实现。

function generateCode(answerid) {
    if($('#embed input[name="comments"]:checked').length > 0 == true) {
        var comments = "&comments=1";
    } else {
         var comments = "";
    }
    $("#embedcode").html('<iframe src="embed.php?answerid=' + answerid + comments + '" width="550" height="' + $('#embed input[name="size"]').val() + '"frameborder="0"></iframe>');
}

在这里,我以正确的行为实现了您的代码:http: //jsfiddle.net/pSZZF/2/

于 2012-12-10T21:56:04.237 回答
5

class您需要引用而不是引用将获取该类的所有成员的 ,$(this)以便在单击该链接时获得该唯一链接。

var answerid = $(this).prop('id');
于 2012-12-10T21:54:32.940 回答
4
 $('.openembed').click(function () {
    generateCode();
    var answerid = $(this).attr('id');
    $('#box').show();
    return false;
});

使用 $(this)。$('.openembed') 指的是多个链接。

于 2012-12-10T21:53:41.167 回答
0
var answerid = $('.openembed').attr('id');

需要是

var answerid = $(this).prop('id');
于 2012-12-10T21:53:46.547 回答
0

单击正确的锚点时获取 id 并将其传递给您的 generateCode 函数

$('.openembed').click(function () {
    var answerid = $(this).attr('id');
    generateCode(answerid)

    $('#box').show();
    return false;
});

改变你的功能

function generateCode(answerid) {
  // dont need this line anymore
  // var answerid = $('.openembed').attr('id');
于 2012-12-10T22:04:10.753 回答
0

其他答案正在尝试修复 click() 函数,但您的问题实际上与 generateCode 函数有关。

您需要将点击的元素传递给 generateCode 函数:

$('.openembed').click(function () {
    generateCode(this);

并修改generateCode:

function generateCode(element) {
    var answerid = element.id;

当然var answerid = $('.openembed').attr('id');,在点击代码中也不正确,但它似乎并没有做任何事情。

于 2012-12-10T22:09:32.767 回答