Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/383.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/2/jquery/85.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
Javascript 将vars传递给eval解决方案,以便在YUI压缩后处理来自json对象的代码字符串_Javascript_Jquery_Json_Yui_Eval - Fatal编程技术网

Javascript 将vars传递给eval解决方案,以便在YUI压缩后处理来自json对象的代码字符串

Javascript 将vars传递给eval解决方案,以便在YUI压缩后处理来自json对象的代码字符串,javascript,jquery,json,yui,eval,Javascript,Jquery,Json,Yui,Eval,我需要将jQuery对象传递到用于评估的解决方案中。问题是我需要访问位于eval区域之外的jQuery对象,但我看不见它。这是我的 var jObj = $(selector); var myCode = "var jObj="+jObj+"; var i="+i+"; "+shape.mouseover.onEnd.replace("\u0027","'"); var myFucn = new Function(myCode); myFucn(); 我要做的项目是 shape.mouseo

我需要将jQuery对象传递到用于评估的解决方案中。问题是我需要访问位于eval区域之外的jQuery对象,但我看不见它。这是我的

var  jObj = $(selector);
var myCode = "var jObj="+jObj+"; var i="+i+"; "+shape.mouseover.onEnd.replace("\u0027","'");
var myFucn = new Function(myCode);
myFucn();
我要做的项目是

shape.mouseover.onEnd.replace("\u0027","'");
正在工作,我在字符串中传递的是

open_info(jObj,i)
这正是我必须解雇的。协议是代码通过YUI压缩程序运行,因此jObj var变成了其他东西,所以我需要传递它。现在我得到一个错误,它认为它应该有和结束]这是不正确的。我似乎在工作,只是没有工作

编辑

有很多方法可以到达我需要的地方,虽然很近,但不太像


现在它在压缩之前工作。。之后不是由于改变。希望你能把它听清楚一些,我可能走错了路,在这里感到困惑

但这不是你想要做的吗

给myFucn送上正确的东西和我的身份

myFucn($(selector),10);

function myFucn(jObj,i)
{
shape.mouseover.onEnd.replace("\u0027","'");
}

我仍然不明白为什么这个问题得到了两张反对票,但它已经解决了,效果很好。诀窍是对dom状态进行相同的操作。一旦它被放置出来,它真的很简单

//so this is what the object is parsed out to from the json string
//since you can't just pass a function stright that way any how
shape.mouseover.onEnd = "open_info(jObj,i)"; 

//this is what will take that string and process it
//note jObj is what is in the orgain code but it changes to 
// var r or something else that is shorter after going thru YUI compressor
// Which is why we can't just use open_info(jObj,i) and it work.. 
// ie: it's not an issue with scoope but an issues with var names being shortened
(function(){
    //this is the trick on passing them so YUI doesn't get them
    //use a string and YUI skips it so we directly create the
    //needed oject in the window namespace 
    window['jObj']=jObj; window['i']=i;
    var p= shape.mouseover.onEnd;
    var f=  new Function(p); 
    f();
})();
就是这样。。我把它放在一个点击或悬停事件中,所以它类似于一次点击

/* EXMAPLE OUTPUT AFTER YUI COMPRESSION
//Note after the YUI compressor get ahold of that 
//processing code above it'll look like 
*/
function(){window.jObj=n,window.i=t;var u=i.mouseover.onEnd,r=new Function(u);r()}();
因此,工作的方式是,我需要修复var jObj被重命名的问题。因此,我只需为名称设置一个sting,并让压缩的var名称填充处理后的代码字符串所需的对象名称。不知道为什么我以前没有看到它,我会保存我的rep值:-\。。哦,好吧。也许是缩短时间的一种方法,但我现在就不谈了

编辑


我放弃了它正在工作的编辑。:)很好。。我想知道还有什么其他方法可以让它做同样的事情。

为什么要使用
eval
?可能您试图解决错误的问题。为什么要使用
新函数
?为什么不做一个普通函数呢
var myFucn=function(){}
jQuery对象无法转换为字符串。它变成了
“[object object]”
,可能是指您的
]
错误。您的示例有点奇怪-为什么不直接运行该代码,而不是将其转换为字符串,使用
新函数
并直接调用它?我支持Joseph。如果不在上下文中查看代码,很难判断,但看起来您想要使用的是一个闭包。您做错了吗?为什么要在字符串中声明变量,并在下一行中尝试将这些变量作为代码进行求值,而不是立即构建变量?这行不通,myFucn($(选择器),10);将在shape.mouseover.onEnd字符串中。当函数myFucn(jObj,i)通过YUI压缩机时,它将作为函数p(r,e)出现故障,这样可以吗?函数p(r,e)与myFucn(jObj)相同是的,它的作用相同。。这并不意味着下一次压缩时,它将是相同的替换。或者这个问题不在这里,哈哈。。tk--但是如果你使用一个好的压缩器,它肯定不会影响代码吗?哈哈,是的。。这是最好的之一。所有这些都是关于这样一个事实,即嵌入代码的snipit被注入了来自锁定json提要的一些检查。这是一种,嗯,特殊的处理方式,但我想,如果它能工作的话,那就没问题了。(虽然我不知道为什么要将参数传递给实际上不接受任何参数的函数。)哈,是的,在我粘贴它之前,有一个完整的剩余。我把它清除了。
/* EXMAPLE OUTPUT AFTER YUI COMPRESSION
//Note after the YUI compressor get ahold of that 
//processing code above it'll look like 
*/
function(){window.jObj=n,window.i=t;var u=i.mouseover.onEnd,r=new Function(u);r()}();