0

好的,仅这个问题就让我头晕目眩。

我有一个调用函数的锚标记:

<a href="#" id="addPerson" onClick="addPerson(); return false;">Add a Guest</a>

仅供参考,这是被调用的函数:

function addPerson() {
//current keeps track of how many rows we have.
current++;
console.log($(this).parent('form').attr('id'));
var strToAdd = '<div class="row">\
          <div class="column grid_2">\
            <label for="two-guests-name'+current+'">Guest '+current+':</label>\
          </div>\
          <div class="column grid_5">\
            <input name="two-guests-name'+current+'" type="text" id="two-guests-name'+current+'" value="Name" onfocus="RemoveFormatString(this, \'Name\')" /> \
            <input name="two-guests-age'+current+'" type="text" class="guestage digits" id="two-guests-age'+current+'" value="Age" size="4" maxlength="3" onfocus="RemoveFormatString(this, \'Age\')" />\
          </div>\
        </div>'

$('#numberguests').append(strToAdd)
};

我想允许此功能在单个页面上处理多个表单。所以我的想法是在树中返回到父表单元素,获取它的 id 并使用它(以某种方式)允许该函数在页面中的多个表单上工作。

您可以看到我尝试使用快速的 console.log 来测试我的想法,但它一直返回“未定义”。我还尝试在锚标记本身中运行 console.log,但它也是“未定义”。

我测试了 .parents() 并且它在锚标记中完美地工作,但在函数 iteslf 中却没有。

有什么建议么?

4

5 回答 5

2

您应该将 $(this) 传递给 add parents ,然后您将有适当的范围在您的函数中使用。所以:

<a href="#" id="addPerson" onClick="addPerson($(this)); return false;">Add a Guest</a>

然后在函数中使用:

function addPerson(anchorElement) {
    var form = anchorElement.parents("form");
    //etc.
}  
于 2010-11-22T22:15:11.697 回答
1

不要使用onclick属性使用 jQuery 事件绑定。由于您没有提供有关标记的任何信息,因此您需要自己填写选择器

//this binds the same function to all a tags specified by the selector
$("form somemoreselectorgotgettheright a").bind("click", function() {
    console.log($(this).parent("form").attr("id"));
    ....
});
于 2010-11-22T22:13:46.623 回答
1

this上下文不同。将 onclick 更改为:

addPerson.call(this);

这将使this函数中的thisin 与锚标记中的 in 匹配。

或者更好的是,根本不使用 onclick 属性,而是使用 jQuery 事件处理程序附件,如下所示:

$(document).ready(function() {
    $('#addPerson').click(function(ev) {
        ev.preventDefault();
        // Do something with $(this), which is the anchor tag
    });
});

而且您的锚标记上不会有任何点击处理程序:

<a href="#" id="addPerson">Add a Guest</a>
于 2010-11-22T22:14:39.033 回答
0

将 parents() 与选择器一起使用(这将向上搜索所有父母,直到找到匹配项)。例如

$(this).parents('form').[...]
于 2010-11-22T22:14:06.410 回答
0

传入 id 作为参数。例如

<a href="#" id="addPerson" onClick="addPerson('addPerson'); return false;">Add a Guest</a>

then...

function addPerson(parent_id) {
// do something with parent_id
于 2010-11-22T22:15:10.497 回答