如何用jquery更改onclick事件?

VAT*_*HAL 66 jquery

我创建了一个js文件,我在其中创建动态表并动态更改日历的click事件,但是在上一个日历图像中点击动态生成的表,日历弹出窗口的日历图像.请帮我

/***------------------------------------------------------------
* 
*Developer: Vipin Sharma
* 
*Creation Date: 20/12/2010 (dd/mm/yyyy)
* 
*ModifiedDate   ModifiedBy      Comments (As and when)
* 
*-------------------------------------------------------------*/
var jq = jQuery.noConflict();
var ia = 1;
jq(document).ready(function(){
    jq("#subtaskid1").click(function() {
        if(ia<=10){
      var create_table = jq("#orgtable").clone();
      create_table.find("input").each(function() {
        jq(this).attr({
          'id': function(_, id) { return ia + id },
          'name': function(_, name) { return ia + name },
          'value': ''               
        });
      }).end();
      create_table.find("select").each(function(){
            jq(this).attr({
                'name': function(_,name){ return ia + name }
            });
      }).end();
      create_table.find("textarea").each(function(){
            jq(this).attr({
                'name': function(_,name){ return ia + name }
            });
      }).end();
      create_table.find("#f_trigger_c").each(function(){
            var oclk = " displayCalendar(document.prjectFrm['"+ ia +"dtSubDate'],'yyyy-mm-dd', this)";                          //ERROR IS HERE
            var newclick = new Function(oclk);
            jq(this).click(newclick);
      }).end();
      create_table.appendTo("#subtbl");
      jq('#maxval').val(ia);
      ia++;
        }else{
            var ai = ia-1;
            alert('Only ' + ai + ' SubTask can be insert');
        }
    });
});
Run Code Online (Sandbox Code Playgroud)

小智 173

您可以onclick使用jQuery 轻松更改元素的事件,而无需运行新函数:

$("#id").attr("onclick","new_function_name()");
Run Code Online (Sandbox Code Playgroud)

通过编写此行,您实际上更改了该onclick属性#id.

您还可以使用:

document.getElementById("id").attribute("onclick","new_function_name()");

  • 仅供参考,如果你有一些参数传递给你的`new_function_name`,你可以写:`$("#id").attr("onclick","new_function_name('"+ param1 +"','"+ param2 + "')");`这是我找到这个答案时所寻找的,它帮助了我.+1` (16认同)

And*_*tov 26

删除旧的事件处理程序

jQuery('#id').unbind('click');
Run Code Online (Sandbox Code Playgroud)

并附上新的

jQuery('#id').click(function(){
    // your code here
});
Run Code Online (Sandbox Code Playgroud)


小智 14

更新这篇文章(2015):unbind/bind不应再用于jQuery 1.7+.而是使用函数off().示例:

$('#id').off('click');
$('#id').click(function(){
    myNewFunction();
    //Other code etc.
});
Run Code Online (Sandbox Code Playgroud)

确保在.click中调用非参数函数,否则将被忽略.

  • 使用jQuery,您可以使用以下方法减少代码量:`$('#id').off('click').on("click",function(){...});` (4认同)
  • @quemeful不一定。您可以将“打开”和“关闭”点击事件放在自己的缩进行上,以使其更具可读性(注释使它难以显示),但是我的版本所做的不只是改变语句的外观。每当调用`$(...)`时,它都会对该元素进行查找。两次写入$(“#id”)`将在DOM中查找元素两次,这意味着我的版本的效率是其两倍。使用id查找,这是最小的改进,但是使用类/元素/属性/数据查找,它的总和就增加了。为了使它像我的一样有效,请将`$(“#id”)`放入`var`中并加以解决。 (3认同)

小智 5

$('#id').attr('onclick', 'function()');

目前(2015年7月11日),该解决方案仍然有效(jquery 2.1.4);我认为,这是最好的选择。