【问题标题】:Passing Variables Javascript传递变量 Javascript
【发布时间】:2011-08-28 06:22:33
【问题描述】:

我正在尝试在 javascript 中传递一个变量。我按以下方式创建了一个链接,一切似乎都正常。

label.innerHTML = '<a href="#" onclick="show_box(this);"> link</a>';

但是,当我以以下方式创建链接时,链接也会传递关联的对象,我从 firebug 收到以下错误 -> “元素列表后缺少 ]”

label.innerHTML = '<a href="#" onclick="show_box(this,'+object+');"> link</a>';

这是将对象传递给函数的可接受方式吗?问题是我在一个函数中创建了这个链接。该函数根据传递给它的对象创建这样的链接。因此,我不能将此“对象”作为全局范围。

【问题讨论】:

    标签: javascript html parameter-passing


    【解决方案1】:

    您正在通过将字符串混合在一起来构建脚本,因此您只能使用字符串,object 将被自动字符串化。

    改用 DOM。

    var link = document.createElement('a');
    link.href = "#"; // Have a more sensible fall back for status bar readers and middle clickers
    link.appendChild(document.createTextNode(' link');
    link.addEventListener('click',function () { show_box(this, object); },false);
    label.appendChild(link);
    

    ...但是使用一个库来抽象出一些浏览器所拥有的非标准事件模型。

    【讨论】:

    • 这种方法被称为Unobtrusive JavascriptjQuery 是一种流行的框架,可以研究它从浏览器中抽象出非标准事件模型。
    • jQuery 很粗,here are some alternatives
    • 愚蠢的问题,当你说“但是使用一个抽象出某些浏览器所拥有的非标准事件模型的库”时。你的意思是?您提供的代码是否适用于所有浏览器?
    • addEventListener 是标准的 W3C DOM。 Microsoft 实现了他们自己的事件模型,我不确定您必须从哪个版本的 IE 开始,然后才能看到那里对该标准的支持。其他浏览器也可能有问题。事件库会为您处理所有差异。
    【解决方案2】:

    您要做的是将object 的内容传递给输出。由于它是一个对象,字符串表示将类似于[object Object]。输出 HTML 如下所示:

    <a href="#" onClick="show_box(this, [object Object]);">link</a>
    

    这是无效的。不要尝试连接对象,只需将其作为另一个参数传递给函数,例如this。或者,更好的是,使用 jQuery:

    <!-- somewhere in the head, or at least after the object is defined -->
    <script type="text/javascript">
    $(function() {
        $('#thelink').click(function() { show_box(this, object); });
    });
    </script>
    
    ...
    
    <a href="#" id="thelink">link</a>
    

    【讨论】:

      【解决方案3】:

      如果您的对象是简单的变量,例如数字或字符串变量,则可以,但如果您传递的是 html 对象,它将无法正常工作,因为它将如下所示。

          <a href="#" onclick="show_box(this,[object HTMLDivElement]);"> link</a>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-10-19
        • 2013-12-25
        • 1970-01-01
        相关资源
        最近更新 更多