【问题标题】:How can I pass an object value name to a function in Jquery如何将对象值名称传递给 Jquery 中的函数
【发布时间】:2015-06-09 18:30:42
【问题描述】:

我正在使用 JQuery Simple modal 插件,我想通过单击链接将 Freemarker 变量/对象传递给我的 Jquery 函数。

作为测试,我创建了一个警告框来查看该值是否正在传递,但它似乎不起作用。

$(function() {

    // Load dialog on page load
    //$('#basic-modal-content').modal();

    // Load dialog on click
    $('#hey').click(function myName(uid) {
        var x = uid;
        alert(uid);

        return false;
    });
});

HTML

<div id="disclaimer${item.uid}">
    Modal data
</div>

<a onclick="myName('${item.uid}')" id="hey">Read the blog</a>

警告框只是作为一个空白对象出现。任何帮助,将不胜感激。谢谢!

【问题讨论】:

  • 你发布的html中的hey在哪里?
  • event 对象是作为参数传递给事件处理程序(如单击函数)的对象。 api.jquery.com/click
  • 对点击事件使用未命名的函数,例如.click(function(uid) {...}),而不是.click(function myName (uid) {...})。您将函数的参数命名为 uid,但实际上您会在此处找到对单击的 DOM 元素的引用。

标签: javascript jquery freemarker simplemodal


【解决方案1】:

首先,您似乎将 html onclick 属性与 jquery .click 方法混淆了。

    <a onclick="myName('${item.uid}')" id="hey">Read the blog</a>

这将调用名为“myName”的 javascript 函数并将字符串 ${item.uid} 传递给它。请注意,这是一个 string,因为您将它用单引号括起来。如果您发出警报,您的警报将按字面意思显示“${item.uid}”。

然后你有一个点击的jquery绑定事件:

    $('#hey').click({....

好的,你需要选择一个。使用 onclick 调用 javascript 函数或使用绑定单击事件。两种方法都可以工作(我自己更喜欢 javascript onclick 函数,但这只是意见)。

如果你想使用jQuery绑定,放一个调试器;在里面排队,这样你就可以轻松地穿过它并观看。我通常使用 e 作为我的事件变量,并且 e.target 获取事件的目标。它看起来像这样:

    $('#hey').click(function(e){
      debugger;
      alert($(e.target).attr('data-uid'));
    });

--- 编辑--- 在下面添加我的注释,以便于阅读。

我喜欢在 onclick 函数中做的一件事是传递 this 指针。如果您有多个相同类型的节点正在调用相同的函数,这将特别有用。

    <a onclick="myName(this)" id="hey2">Read the blog</a> 
    <a onclick="myName(this)" id="hey3">Read the blog</a>

然后,在 javascript 中,你的函数看起来像:

    function myName(ptr) 
    {
        $(ptr).....
        // do some stuff 

    } 

【讨论】:

  • 我喜欢在 onclick 函数中做的一件事是传递 this 指针。如果您有多个相同类型的节点正在调用相同的函数,这将特别有用。 &lt;a onclick="myName(this)" id="hey"&gt;Read the blog&lt;/a&gt; 然后,在 javascript 中,你的函数看起来像:'function myName(ptr) { $(ptr)....... // 做一些事情 }'
【解决方案2】:

试试这个:

function myName(uid){
  alert(uid);
}

您不需要将它包装在 jquery 事件处理程序中,因为您已经在 Freemarker 模板中将其作为 onclick 事件调用。

或者,您可以这样做:

<a data-uid="${item.uid}" id="hey">...</a>

让你的 javascript 像这样:

$('#hey').click(function(){
  alert($(this).data('uid'));
}

【讨论】:

  • 绝对有道理。谢谢!
猜你喜欢
  • 2021-12-24
  • 1970-01-01
  • 2010-12-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 1970-01-01
相关资源
最近更新 更多