Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/76.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/variables/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在jQuery调用中获取全局变量的新副本_Jquery_Variables - Fatal编程技术网

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

在jQuery调用中获取全局变量的新副本,jquery,variables,Jquery,Variables,尝试使用变量编辑ID,并且每次都为该变量调用相同的值,即使该变量正在更改: 好的,我正在处理从一个部分拖放到另一个部分的代码,它将在拖放部分(克隆/附加)中拖放原始文件的克隆副本。如果单击它,它将克隆/附加一个包含表单的div部分。我想将表单ID更改为唯一的,方法是将其更改为静态字符串+变量。完成克隆后,应增加变量,以便下次创建其他副本时获得新的表单ID 似乎发生的情况是,它在代码第一次运行时工作正常,它获取变量并将其附加到静态字符串中,但在为新克隆第二次调用它时,它使用与上次相同的值,而不是获

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

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

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

变量正在正确更新,因为我使用chrome的inspect元素(脚本选项卡,watch expressions)工具进行了跟踪,并且当我对要克隆的不同对象进行不同调用时,它会采用全局变量的当前值-对于第一次调用,然后,它会做同样的事情,并在第一次调用时“固定”在其初始值上

我尝试直接使用javascript,而不是使用jQuery来更改ID,第一次它工作正常,第二次第二个克隆与第一个克隆具有相同的ID,并且它“正确”更改了原始ID-我正在为这一个执行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;
var formID=0;//用于使每个表单都有自己唯一的ID
$(“.draggable”)。单击(函数()
{
//首先检查它是否还没有#testContents,然后检查它是否在复制区域
if(!$(this).is(':has(.dragContents)&&$(this.parent().hasClass('copyrea'))
{
//如果它还没有这个,并且位于正确的位置,请附加一个适当类型的新副本
开关($(this.html())//使用项目的html内容来确定要添加的内容
{
案例“RSS”:
$(“#RSScontents”).clone().appendTo(this);
//document.getElementById(“RSS”).id=“RSS”+formID;
$(this.find(“#RSS”).attr(“id”,“RSS”+formID);
formID++;
打破
“广告”一案:
$(“#drag2contents”).clone().appendTo(this);
$(this.find(“#advert”).attr(“id”,“advert”+formID);
formID++;
打破
然后修改正在克隆的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>

这是RSS信息部分
RSS源URL:
RSS源标题:

尝试更改

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

~z~林恩·赫德利

实际修复:

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

由于某种原因,在原稿被克隆后,它会继续克隆第一个克隆(它被更改为RSS0)……不要问我为什么没有工作代码~Adarajin

很难做到……你能发布一个JSFIDLE吗?这是我在atm上获得代码的页面——因为包含了获取jquery UI的内容(可拖动/可拖放)工作我不确定如何做JSFIDLE-如果你检查代码,你可以看到发生了什么,这就是我调试它的方式。好吧,#1=RSS0,#2=RSS1和#3…返回到RSS0,与#4一样。知道为什么不能正确更新吗?因为它看起来应该工作,所以它真的让我感到困惑…我感谢你的接受顺便说一句,是时候帮我了:-)事实上,再看一遍我的代码,我有点困惑为什么#2能工作(为什么#3/4会使用RSS0而不仅仅是RSS)因为每次我都在制作一个新的克隆,里面有RSS的形式,然后改变这个新的克隆…1-1=0不是不是为了第二个空的吗?或者是出于某种原因克隆第一个克隆,而不是原始的,即使我明确地说要克隆原始的?…我看到了。$(“#RSSContents”).clone().appendTo(this);正在创建许多id为#RSSContents的元素。因此每次都要克隆不同的div,使用不同的#RSSN子元素。要修复,请用另一种方式标识#RSSContents。好吧,我让它工作了,显然在它克隆原始内容之后,出于某种原因,它会克隆第一个克隆,而不是再次克隆原始内容(通读代码,我不知道它为什么这样做,但结果告诉我的是…)我的解决方案是采用您建议的解决方案,并将其设置为$(this)。find(#RSS0)对于其他变量,它就像一个符咒。唯一的问题是,现在我需要为我正在复制的其他对象使用不同的变量,因为如果它不是从0开始,它就不起作用了……但至少它起作用了,这不是一个很大的变化。再次感谢您的帮助。它应该一次只创建一个原始副本,然后我就指定了通过说出$(this)来复制克隆。查找(#RSS),其中'this'是第一个/外部克隆对象,然后只有一个克隆div实例包含形式#RSS,我立即将其更改为新的/唯一的,这样当我查看整个页面时,它是唯一的。。。
if (formID == 0) {
    $(this).find("#RSS").attr("id","RSS"+formID);
}
else {
$(this).find("#RSS0").attr("id","RSS"+formID);
}