zoukankan      html  css  js  c++  java
  • js eval

    js eval
    2007-09-02 17:02
    下面这个函数,怎么改造才能适合通用:
    <script language = "JavaScript">

    function changelocation(locationid)
        {
        document.addNEWS.SmallClassName.length = 1;
        var locationid=locationid;
        var i;
        for (i=0;i < onecount; i++)
            {
                if (subcat[i][1] == locationid)
                {
                    document.addNEWS.SmallClassName.options[document.addNEWS.SmallClassName.length] = new Option(subcat[i][0], subcat[i][2]);
                }      
            }
        }
    </script>

    这是一个二级下拉菜单的一个函数,在函数中的 addNEWS 是一个 <Form> 的名称,我想把这个代码改进1下,改成不同的<Form>都可以调用,而不是代码中限制死的 addNEWS .

    于是我就想到编程时把<form> 的名称传入到函数里面,增加多1个参数 FormName,用来把外面的不同的<Form>的名称传入函数

    function changelocation(locationid,FormName)

    现在问题是 document.addNEWS.SmallClassName.options 不能直接改成
    document.FormName.SmallClassName.options 否则就是只对 名叫 FormName 的<form>执行操作了,究竟怎么才能把 传入的<form>名的字符串参数转换成一个对象,而不只是单单一个字符串,也就是 document.(???).SmallClassName.options 括号中间那部分怎么写才行啊?

    传参数时
    this.form
    可以表示当前的form。
    在js里面可以用
    document.forms(0)
    表示当前form。
    如果非要用formname
    则可以:
    obj = eval("document."+formname)
    obj....

    <SCRIPT LANGUAGE="JavaScript">
    <!--
       function test(obj){
           obj.a.value=1
       }
    //-->
    </SCRIPT>
    <form>
       <input name=a type=text >
       <input type=button value=look onclick=test(this.form)>
    </form>

    <SCRIPT LANGUAGE="JavaScript">
    <!--
       function test(){
           document.forms(0).a.value=1
       }
    //-->
    </SCRIPT>
    <form >
       <input name=a type=text >
       <input type=button value=look onclick=test()>
    </form>


    <SCRIPT LANGUAGE="JavaScript">
    <!--
       function test(formname){
           obj=eval("document."+formname)
           obj.a.value=1
       }
    //-->
    </SCRIPT>
    <form name=form1>
       <input name=a type=text >
       <input type=button value=look onclick=test('form1')>
    </form>

    最好的
    function changelocation(locationid,FormName){
    document.all(FormName).SmallClassName.options

    等你需要动态创建语句的时候,你将会发现它非常独特的作用,上网看了半天,找到些零散的内容,想来也算非常全面的了,全部把它收集起来放在这里以备后用,也供大家讨论学习使用。

    eval()函数】

    JavaScript有许多小窍门来使编程更加容易。
    其中之一就是eval()函数,这个函数可以把一个字符串当作一个JavaScript表达式一样去执行它。
    举个小例子:

    var the_unevaled_answer = "2 + 3";
    var the_evaled_answer = eval("2 + 3");
    alert("the un-evaled answer is " + the_unevaled_answer + " and the evaled answer is " + the_evaled_answer);

    如果你运行这段eval程序, 你将会看到在JavaScript里字符串"2 + 3"实际上被执行了。
    所以当你把the_evaled_answer的值设成 eval("2 + 3")时, JavaScript将会明白并把2和3的和返回给the_evaled_answer。
    这个看起来似乎有点傻,其实可以做出很有趣的事。比如使用eval你可以根据用户的输入直接创建函数。
    这可以使程序根据时间或用户输入的不同而使程序本身发生变化,通过举一反三,你可以获得惊人的效果。
    在实际中,eval很少被用到,但也许你见过有人使用eval来获取难以索引的对象。

    文档对象模型(DOM)的问题之一是:有时你要获取你要求的对象简直就是痛苦。
    例如,这里有一个函数询问用户要变换哪个图象:变换哪个图象你可以用下面这个函数:

    function swapOne()
    {
    var the_image = prompt("change parrot or cheese","");
    var the_image_object;

    if (the_image == "parrot")
    {
    the_image_object = window.document.parrot;
    }
    else
    {
    the_image_object = window.document.cheese;
    }

    the_image_object.src = "ant.gif";
    }

    连同这些image标记:

    [img src="/stuff3a/parrot.gif" name="parrot"]
    [img src="/stuff3a/cheese.gif" name="cheese"]

    请注意象这样的几行语句:
       
    the_image_object = window.document.parrot;

    它把一个图象对象敷给了一个变量。虽然看起来有点儿奇怪,它在语法上却毫无问题。
    但当你有100个而不是两个图象时怎么办?你只好写上一大堆的 if-then-else语句,要是能象这样就好了:


    function swapTwo()
    {
    var the_image = prompt("change parrot or cheese","");
    window.document.the_image.src = "ant.gif";
    }

    不幸的是, JavaScript将会寻找名字叫 the_image而不是你所希望的"cheese"或者"parrot"的图象,
    于是你得到了错误信息:”没听说过一个名为the_image的对象”。

    还好,eval能够帮你得到你想要的对象。

    function simpleSwap()
    {
    var the_image = prompt("change parrot or cheese","");
    var the_image_name = "window.document." + the_image;
    var the_image_object = eval(the_image_name);
    the_image_object.src = "ant.gif";
    }


    如果用户在提示框里填入"parrot",在第二行里创建了一个字符串即window.document.parrot. 然后包含了eval的第三
    行意思是: "给我对象window.document.parrot" - 也就是你要的那个图象对象。一旦你获取了这个图象对象,你可以把
    它的src属性设为ant.gif. 有点害怕?用不着。其实这相当有用,人们也经常使用它。

    我们常常在Javascript中间到Eval这个函数,
    有些人觉得这个函数很奇怪,可以把一些字符串变的功能很强大
    在我们需要将普通的字符串转变成具体的对象的时候,就会用到这个函数

    eval 函数对作为数字表达式的一个字符串进行求值,其语法为:

    eval(expr)

    此处 expr 是一个被求值的字符串参数。如果该字符串是一个表达式,eval 求该表达式的值;如果该参数代表一个或多个 JavaScript 语句,那么 eval 执行这些语句。eval 函数可以用来把一个日期从一种格式(总是字符串)转换为数值表达式或数字。

    ==============================
    Eval 函数
    功能:先解释Javascript代码,然后在执行它
    用法:Eval(codeString)
    codeString是包含有Javascript语句的字符串,在eval之后使用Javascript引擎编译。

    注释:

    例子:eval(id + "_icon.src="/imgs/collapse_up.gif'");
    id是之前设定的参数,而在双引号中的字符串则是需要编译的

    引用:
    --------------------------------------------------------------------------------
    function tophide(id)    //id indicates menu
    {
        if (top.topframeset.rows == "31,*")
        {
            top.topframeset.rows = "86,*";
            eval(id + "_icon.src="/imgs/collapse_up.gif'");
            eval(id + "_icon.alt='Collapse The Head'");
            head.style.display = "block"
            }
        else
        {
            top.topframeset.rows = "31,*";
            eval(id + "_icon.src="/imgs/collapse_down.gif'");
            eval(id + "_icon.alt='Expand The Head'");
            head.style.display = "none"
        }
    }


    Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=761094
  • 相关阅读:
    python 包管理工具 pip 的配置
    Python 变量作用域 LEGB (下)—— Enclosing function locals
    Python 变量作用域 LEGB (上)—— Local,Global,Builtin
    2020 Java 面试题 小结 (答案慢慢补上,有错误请指出)
    mysql 根据日期(date)做年,月,日分组统计查询
    jvm指令
    正则表达式 分割地址 获取省市区详细地址
    .Net 异常记录
    WCF设计服务协议(一)
    plsql ORA-01789:查询块具有不正确的结果列数
  • 原文地址:https://www.cnblogs.com/xianyin05/p/1439095.html
Copyright © 2011-2022 走看看