1

我已经搜索了 stackoverflow 以及网络的其他部分,但没有找到我想要做的事情的明确答案。我有以下 HTML 代码:

<a id="orderPadReviewSubmitBtn" href="#" class="portlet-lightGrey-button  float-right"><span>Submit order</span></a>

它是通过单击按钮通过 JavaScript 加载的。我正在尝试使用委托,因为网站上的 jQuery 是 1.4.2,所以没有“on()”可用。

我正在尝试的代码是这样的:

$("a[id=orderPadReviewSubmitBtn]").delegate("span","load", function(){
$("#orderPadReviewSubmitBtn").mousedown(function(){alert("Order Submitted");}); });

我也试过:

$("#orderPadReviewSubmitBtn").delegate("span","load", function(){
$("#orderPadReviewSubmitBtn").mousedown(function(){alert("Order Submitted");}); })

如果在加载上述按钮后加载这些工作,但如果我在加载按钮之前运行 jQuery,则不会。

我的最终目标是一旦加载此按钮并且有人单击它,就能够运行其他一些功能。

我有一种感觉,我缺少一些简单的东西,非常感谢您在查找问题方面的帮助。

4

2 回答 2

1

您不需要使用加载事件处理程序

// bind event handler to parent that exists at the time dom is ready
// it will then listen for click event from element with id=orderPadReviewSubmitBtn
$(function(){ // <-- put your code inside a document.ready function
    $('body').delegate('#orderPadReviewSubmitBtn','click',function(){
        alert("Order Submitted");
    });   
});

替换body为最近的静态父元素

我认为您不了解委派的工作原理-这就是您认为需要该load活动的原因。它的工作原理是将它绑定到一个已经存在并且是静态的父元素(意味着它不会改变) - 然后它将监听您指定的事件,因为它们从您使用的特定元素/元素中冒泡选择(在这种情况下,您的元素带有id=orderPadReviewSubmitBtn)

于 2012-10-18T20:57:08.290 回答
0

你可以使用.live(),它在 1.4 中没有贬值,你的代码最终会是这样的:

$("a[id=orderPadReviewSubmitBtn]").live("mousedown", function() {
    alert("Order Submitted");
});​

演示:http: //jsfiddle.net/SO_AMK/d2SYE/

而且,正如你所提到的,如果你想调用另一个函数,你会使用这个:

$("a[id=orderPadReviewSubmitBtn]").live("mousedown", newFunc);

function newFunc() {
    alert("Order Submitted");
}​

演示:http: //jsfiddle.net/SO_AMK/YwNyP/

于 2012-10-18T21:00:19.297 回答