Javascript 将函数绑定到其他作用域上的onClick

Javascript 将函数绑定到其他作用域上的onClick,javascript,jquery,javascript-events,Javascript,Jquery,Javascript Events,我正在尝试将一个函数绑定到锚点“onclick”属性。我没有使用传统jQuery的bind/live/on/which,因为我有一些其他脚本阻止事件传播(我知道这很糟糕) 要将函数绑定到“onclick”属性,我将向如下模块传递一个JSON对象: function foo() { alert('foo') } $('document').ready(function() { var options = { opt1: 'fooID', opt2: '

我正在尝试将一个函数绑定到锚点“onclick”属性。我没有使用传统jQuery的bind/live/on/which,因为我有一些其他脚本阻止事件传播(我知道这很糟糕)

要将函数绑定到“onclick”属性,我将向如下模块传递一个JSON对象:

function foo() {
  alert('foo')
}

$('document').ready(function() {
    var options = {
        opt1: 'fooID',
        opt2: 'barID',
        json: mightyJSON,
        actions: [
            { url: 'contact/_id_/edit', text: "Edit", iconPath: 'edit.png' },
            { url: '#', onClick: foo, text: "Delete", iconPath: 'delete.png' }
        ]
    };

    var trolol = myModule.configure(options);
});
var $link = $('<a></a>',{
    href : link,
    title : actions[i].text,
    'class' : cssClass,
    text : 'foo',
    click : actions[i].onclick
})
return $link;
$link[0].onclick = options.actions[i].onClick;
如您所见,名为“foo”的函数是通过JSON的“onClick”属性传递的。函数是在对象上方定义的

在“myModule”中,我创建了如下锚定标记:

var buildLinks = function(objectID)
{
  var linksNbr = actions.length;
  var link, cssClass;

  for (var i = 0; i < linksNbr; i++)
  {
    // Adding the object ID to the URL
    link     = actions[i].url.replace('_id_', objectID);
    cssClass = actions[i].cssClass || '';

    var $link = $(document.createElement('a')).attr('onClick', actions[i].onClick)
                                              .attr('href', link)
                                              .attr('title', actions[i].text)
                                              .addClass(cssClass)
                                              .text('foo');
  }

  return $link.html();
};
var buildLinks=function(objectID)
{
var linksNbr=actions.length;
var-link,cssClass;
对于(变量i=0;i
问题是,正如您所期望的,当脚本被解析时,只在那里执行'foo'。“onclick”在之后甚至不起作用

我可以按如下方式传递它:单击“foo()”
。onclick可以工作,但它也在解析时执行,在我看来,它非常难看

我希望仍然能够像这样传递它,但工作正常(即加载时不执行,但仅在单击时执行)

不幸的是,它必须与jQuery1.4.4配合使用

  • 如果可能,返回元素,而不是其
    .html()

  • 完成此操作后,当您已经获得函数引用时,不要使用
    .attr('onclick',…)
    ,使用
    .prop
    ,甚至只使用
    element.onclick=…

  • e、 g

    $link=$(“”{
    href:link,
    标题:行动[i]。正文,
    “类”:cssClass,
    文本:“foo”
    }).prop('onclick',actions[i].onclick);
    
    我会这样做:

    function foo() {
      alert('foo')
    }
    
    $('document').ready(function() {
        var options = {
            opt1: 'fooID',
            opt2: 'barID',
            json: mightyJSON,
            actions: [
                { url: 'contact/_id_/edit', text: "Edit", iconPath: 'edit.png' },
                { url: '#', onClick: foo, text: "Delete", iconPath: 'delete.png' }
            ]
        };
    
        var trolol = myModule.configure(options);
    });
    
    var $link = $('<a></a>',{
        href : link,
        title : actions[i].text,
        'class' : cssClass,
        text : 'foo',
        click : actions[i].onclick
    })
    return $link;
    
    $link[0].onclick = options.actions[i].onClick;
    
    var$link=$(',)函数插入节点,即包含事件的html


    对于传播问题,我会这样做:

    function foo() {
      alert('foo')
    }
    
    $('document').ready(function() {
        var options = {
            opt1: 'fooID',
            opt2: 'barID',
            json: mightyJSON,
            actions: [
                { url: 'contact/_id_/edit', text: "Edit", iconPath: 'edit.png' },
                { url: '#', onClick: foo, text: "Delete", iconPath: 'delete.png' }
            ]
        };
    
        var trolol = myModule.configure(options);
    });
    
    var $link = $('<a></a>',{
        href : link,
        title : actions[i].text,
        'class' : cssClass,
        text : 'foo',
        click : actions[i].onclick
    })
    return $link;
    
    $link[0].onclick = options.actions[i].onClick;
    
    html

    js
    $('a[href=“#no”]').live('click',function(){return false;})

    通过这种方式,每当href指向
    #no
    时,事件最终会传播

    这里有一个问题。如果这种方法很好,您可以如下设置onclick在jquery的原始元素上,如下所示:

    function foo() {
      alert('foo')
    }
    
    $('document').ready(function() {
        var options = {
            opt1: 'fooID',
            opt2: 'barID',
            json: mightyJSON,
            actions: [
                { url: 'contact/_id_/edit', text: "Edit", iconPath: 'edit.png' },
                { url: '#', onClick: foo, text: "Delete", iconPath: 'delete.png' }
            ]
        };
    
        var trolol = myModule.configure(options);
    });
    
    var $link = $('<a></a>',{
        href : link,
        title : actions[i].text,
        'class' : cssClass,
        text : 'foo',
        click : actions[i].onclick
    })
    return $link;
    
    $link[0].onclick = options.actions[i].onClick;
    

    您好,您可以用一个html来发布这个,我们可以在上面试用吗?或者您可以发布一个提琴吗?在那里编写代码和给您一个解决方案比较容易:)您真的需要传递
    .html()
    ,而不仅仅是创建的元素吗?将它作为[actions[i].onClick]()传递如何,由于它们都是
    a
    元素,您可以给它们一个默认类,如
    linkDelegatorClass
    ,如果您委派事件,则检查该类。。。在我看来,这似乎是解决这个问题的最有效方法。
    点击
    .on(“点击”)
    .attr('click',ref)
    (隐式调用
    。点击
    ):波普说他不能使用
    .on
    。我注意到他还在序列化元素,而不是传递它,这将破坏将处理程序设置为属性的过程:(他说有东西正在停止传播,在这种情况下,他使用什么并不重要
    工作,那么正常的方式也必须工作。onclick工作,而不是我所说的.on/.click/.delegate。我不能使用
    .prop()
    ,因为我被jQuery 1.4.4困住了:它工作正常,但我想知道为什么我需要使用原始
    onclick
    属性,以及为什么它不触发“foo”虽然jQuery
    attr
    ?我猜jQuery的函数“attr”执行该函数是希望得到一个字符串(因为它需要一个字符串),而上面的示例只声明了对函数的引用。@koskoz:该属性与JavaScript/jQuery的工作方式几乎没有关系或根本没有关系:该属性是DOM元素的属性,而不是JS对象,因此函数JS函数引用不能是html属性,只能将其名称设置为属性。批准的答案集事件处理程序仅在JS中使用,而不是通过设置节点属性,这样您就可以使用函数引用。或者,jQuery提供了
    .prop
    方法,而jQ为您进行绑定。除了插入节点的方式之外,这并不能真正解决任何问题……因为它不使用
    $link.html()
    (应该返回一个带有“foo”btw的字符串)这正是Alnitak和我试图解释的…我想使用user338128或Alnitak答案,但我不能。我没有可用的
    prop
    或live/delegate/on。我一直这么说…我通过使用
    .append()插入最后的元素来管理它
    。我最初使用的是HTML字符串,因为我找不到更好的方法将其插入dhtmlxGridObject的单元格中。现在,我使用的是
    。append()
    而不是字符串
    click()