【问题标题】:Execute a function before the onclick event在onclick事件之前执行一个函数
【发布时间】:2014-10-29 11:23:09
【问题描述】:

我有一张图片

<input type="image" onclick="javascript:form1.ACTION.value='Edit';
                             form1.cin.value='100104213';
                             form1.histSeq.value='85258';                          
                             form1.typeCd.value='BL';
                             form1.RMC_CONFLICT_STATUS.value='';                                 
                             form1.submit(); 
                             return false" 
 alt="Click to edit this record." 
 title="Edit Row" 
 src="/images/editImage.gif" name="editButton">

如果你仔细看,我有一些语句是在图像的单击上执行的。

现在在 onload 期间,我想关联一个应该在语句之前调用的事件(可以是 onlick)。

我试过了

$('#grid0').find('#'+(i+1)).find('input:image').on('click',function(){
                                        console.log('Test');    
                                            });

但这是在语句之​​后调用的。

【问题讨论】:

  • 你为什么不能...on('click',function(){console.log('Test'); form1.ACTION.value='Edit'...});
  • 请注意,您不需要在内联事件处理程序中说javascript:
  • @artm 我是因为他想在需要时注入调试日志,而不更改页面代码,但是是的……这是一个很不好的习惯这么多代码直接在onclick属性中
  • @SashiKant 只需点击我第一条评论中的链接(如果您使用的是 jQuery)。否则,您可以简单地将所有现有的 onclick 属性替换为您首先登录的新属性,然后执行现有代码(之前已移至 data-old-onclick)。

标签: javascript jquery events


【解决方案1】:

您可以获取旧的 onclick 值,更改 onclick 处理程序,执行您的代码并评估存储的旧代码,就像这样:

var b = $("#text");
oldOnClick = b.attr("onclick");

var c = document.getElementById("text");
c.onclick = function(){
    alert("Newly Attached");
    eval(oldOnClick); 
};

http://jsfiddle.net/8bpo4Lk9/

【讨论】:

  • 或者在 jQuery 中根本不使用基于属性的事件处理程序? :)
  • +1 通常使用 jQuery:$("input:image").data("old-onclick", $("input:image").attr("onclick")).attr("onclick", "").on("click", ...); 但正如 k-nut 在这里 jQuery 所指出的,这不是严格要求的!
  • 非常感谢,我明白了 :)
猜你喜欢
  • 2013-05-02
  • 1970-01-01
  • 1970-01-01
  • 2020-04-22
  • 2013-05-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-25
  • 2012-11-24
相关资源
最近更新 更多