我在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><iframe src="embed.php?answerid=' + answerid + comments + '" width="550" height="' + $('#embed input[name="size"]').val() + '" frameborder="0"></iframe></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>
答案 0 :(得分:12)
你的问题在这里:
$('.openembed')
返回匹配元素的数组。您应该只选择单击的元素。
如果您将$('.openembed')
事件分配给具有此类的所有元素,则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/
答案 1 :(得分:5)
您需要引用class
,而不是引用会占据该类所有成员的$(this)
,这样您就可以在点击时获得该唯一链接。
var answerid = $(this).prop('id');
答案 2 :(得分:4)
$('.openembed').click(function () {
generateCode();
var answerid = $(this).attr('id');
$('#box').show();
return false;
});
使用$(this)。 $('。openembed')指的是多个链接。
答案 3 :(得分:0)
var answerid = $('.openembed').attr('id');
需要
var answerid = $(this).prop('id');
答案 4 :(得分: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');
答案 5 :(得分:0)
其他答案正在尝试修复click()函数,但您的问题实际上是使用generateCode函数。
您需要将单击的元素传递给generateCode函数:
$('.openembed').click(function () {
generateCode(this);
修改generateCode:
function generateCode(element) {
var answerid = element.id;
当然,点击代码中的var answerid = $('.openembed').attr('id');
也不正确,但无论如何它似乎都没有做任何事情。