0

尝试使用变量编辑 ID,并且每次都会为变量调用相同的值,即使变量正在更改:

好的,我正在乱用代码从一个部分拖放到另一个部分,它将在放置部分(克隆/追加)中放置原始副本的克隆副本。如果单击它,它将克隆/附加一个包含表单的 div 部分。我想将表单 ID 更改为唯一的,方法是将其更改为静态字符串 + 变量。完成克隆后,它应该增加变量,以便下次制作不同的副本时,它将获得一个新的表单 ID。

似乎正在发生的是,它在代码第一次运行时工作得很好,它获取变量并将其附加到静态字符串,但是当它被第二次调用以进行新克隆时,而不是获取当前值全局变量,它使用与上次相同的值。所以第一次调用会导致 RSS0,第二次调用也会导致 RSS0,即使 formID 变量现在为 1 - 我预计它会是 RSS1,但我很困惑为什么它不是。

变量正在正确更新,因为我使用 chrome 的检查元素(脚本选项卡,监视表达式)工具跟踪了这一点,并且当我对正在克隆的不同对象进行不同调用时,它采用全局变量的当前值 - 第一个调用,然后它做同样的事情,并在第一次调用时“卡”在其初始值上。

我尝试直接通过javascript而不是使用jQuery来更改ID,第一次它正常工作,第二次第二个克隆与第一个克隆具有相同的ID,它“正确”更改了ORIGINAL - 我是为此做一个 getElementById,然后拉起第一个匹配项(原始匹配项列在页面底部附近)以更改 ID。

好的,现在我已经解释了我正在尝试做的事情以及似乎实际发生的事情,让我提出我的代码,也许有人可以告诉我如何解决这个问题,以便每个表单都有一个唯一的 id.. ..

var formID = 0; //used to make each form have its own unique ID

<!-- code section removed - above = global variable,
below is within some other stuff but working 'fine' -->

$(".draggable").click(function()
{
//first check if it doesn't already have #testContents, then check if it is in the copy area
if(!$(this).is(':has(.dragContents)') && $(this).parent().hasClass('copyArea'))
{
    //if it doesn't already have this and is in the correct spot, append a new copy of the appropriate type

    switch( $(this).html() ) //use the html contents of the item to determine which one to add
    {
                        case "RSS":
                            $("#RSScontents").clone().appendTo(this);
                            //document.getElementById("RSS").id = "RSS"+formID;
                            $(this).find("#RSS").attr("id","RSS"+formID);
                            formID++;
                            break;
                        case "Advertisement":
                            $("#drag2contents").clone().appendTo(this);
                            $(this).find("#advert").attr("id","advert"+formID);
                            formID++;
                            break;

以及被克隆然后修改的 div 标记,以便您可以看到我正在使用的表单:

<div id="RSScontents" class="dragContents" style="width:380px; padding-left:2px; margin:5px;">
This is the RSS information section
<form id="RSS" method="post">
    RSS Feed URL: <input type="text" name="rssFeedURL" size=35 /><br />
    RSS Feed Title: <input type="text" name="rssFeedTitle" size=35 /><br />
    <input type=button name="rsssave" value="Save"><input type=button name="rssdelete" class="delete" value="Delete">
</form>

4

1 回答 1

0

尝试改变

$(this).find("#RSS").attr("id","RSS"+formID);

if (formID == 0) {
    $(this).find("#RSS").attr("id","RSS"+formID);
}
else {
$(this).find("#RSS"+(formID - 1)).attr("id","RSS"+formID);
}

〜林海德利

实际修复:

if (formID == 0) {
    $(this).find("#RSS").attr("id","RSS"+formID);
}
else {
$(this).find("#RSS0").attr("id","RSS"+formID);
}

因为在原件被克隆后出于某种原因,它一直在克隆第一个克隆(已更改为 RSS0)...不过不要问我为什么~Adarajin

于 2012-05-30T20:42:03.503 回答