在jQuery调用中获取全局变量的新副本

时间:2012-05-30 19:41:51

标签: jquery variables

尝试使用变量编辑ID,并且每次即使变量发生变化,它也会为变量调用相同的值:

好吧,我正在搞乱使用代码来从一个部分拖放到另一个部分,在那里它会在drop部分(clone / append)中删除原始文件的克隆副本。如果单击它,它将克隆/附加包含表单的div部分。我想通过将表单ID更改为静态字符串+变量来将其更改为唯一。在进行克隆之后,它应该增加变量,以便下次制作不同的副本时,它将获得一个新的表单ID。

要发生的事情是它在第一次运行代码时工作得很好它获取变量并将其附加到静态字符串,但是当它第二次调用新克隆时,而不是获取全局变量的当前值,它使用与上次相同的值。因此,第一次调用将导致RSS0,并且即使formID变量现在为1,第二次调用也会导致RSS0 - 我希望它是RSS1并且非常混淆为什么它不是。

变量IS正确更新,因为我使用chrome的inspect元素(脚本选项卡,监视表达式)工具跟踪它,当我对克隆的其他对象进行不同的调用时,它获取全局变量的当前值 - 对于第一次调用,它会执行相同的操作,并在第一次调用时“卡在”其初始值。

我尝试直接浏览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>

1 个答案:

答案 0 :(得分: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);
}

~Lyn Headley

实际修复:

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

因为原因被克隆后出于某种原因,它不断克隆第一个克隆(改为RSS0)...不要问我为什么虽然~Adarajin