为什么我使用<img/>'onload'事件处理程序偶尔工作?

时间:2013-10-02 00:29:04

标签: javascript html

下面的代码,有时可行,但我不知道为什么它不能一直有效。

我正在尝试确定有多少人按下不同网页上的“立即购买”PayPal按钮。

目前,网站上的每个页面都从唯一的位置(感谢mod_rewrite)获取一个43字节的1x1 gif,这个位置在Apache访问日志中很容易被grep。我的想法是,如果我可以使用javascript更改该图像的URL,我可以跟踪访问日志中的点击,同时仍然可以使用浏览器的前进和后退按钮。

下面的代码(Override_Form_OnClick())在页面上查找表单(只有一个)并将处理程序(my_shopping())附加到表单的onclick处理程序。

my_shopping()处理程序然后更新名为my_stats的图像资源(同样,只有一个),将表单元素的submit函数附加到图像的onload处理程序,然后返回false,以便在加载新图像之前不会提交表单。

这是意图,但它并不总是在访问日志中记录新图像。当然,我只是使用开发工具在Chrome中测试它,所以也许这是其他浏览器的问题?

<script>
function my_shopping(onload_handler, shopping_tag) {
    'use strict';
    var my_img_elements = document.getElementsByName('my_stats'),
        my_img_url,
        i,
        len;
    len = my_img_elements.length;
    if (len > 1) {
        alert("Multiple my_stats elemetns on page: only expected 1.");
    }
    for (i = 0; i < len; i += 1) {
        my_img_url = my_img_elements[i].src;
        my_img_url = my_img_url.replace(".gif", "." + shopping_tag + ".gif");
        my_img_elements[i].onload = onload_handler;
        my_img_elements[i].src = my_img_url;
    }
    return false;
}

function Override_Form_OnClick() {
    'use strict';
    var elements = document.getElementsByTagName('form'),
        element,
        i,
        len;
    len = elements.length;

    if (len > 1) {
        alert("Multiple 'form' elements on page: only expected 1.");
    }
    for (i = 0; i < len; i += 1) {
        element = elements[i];
        element.onclick = function () { my_shopping(element.submit, "shopping.PayPal") };
    }
    return true;
}

Override_Form_OnClick();
</script>

该网站的政策强烈倾向于仅使用javascript。

1 个答案:

答案 0 :(得分:0)

也许这会奏效。让我知道。

for(var i=0,l=my_img_elements.length; i<l; i++){
  var mi = my_img_elements[i], ni = new Image;
  ni.src = mi.src = mi.src.replace(".gif", "." + shopping_tag + ".gif");
  ni.onload = onload_handler;
}