如何改变与jQuery的onclick事件?
我已经创build了一个js文件,我在其中创builddynamic表并dynamic更改日历的点击事件,但是点击日历图像中的dynamic生成的日历popup窗口的日历图像。 请帮帮我
码
/***------------------------------------------------------------ * *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'); } }); });
你可以很容易地改变一个elemt的事件由jquery没有运行新的function
$("#id").attr("onclick","new_function_name()");
通过写这一行,你实际上改变了#id的属性。
你也可以使用
document.getElementById("id").attribute("onclick","new_function_name()");
删除旧的事件处理程序
jQuery('#id').unbind('click');
并附上新的
jQuery('#id').click(function(){ // your code here });
更新这个post(2015年):解除/绑定不应该再用jQuery 1.7+。 改用off()函数。 例如:
$('#id').off('click'); $('#id').click(function(){ myNewFunction(); //Other code etc. });
请确保您在.click中调用非参数函数,否则将被忽略。
$('#id').attr('onclick', 'function()');
现在(2015年7月11日)这个解决scheme还在工作(jquery 2.1.4); 在我看来,这是最好的select。
如果你想用jQuery改变一个特定的onclick事件,你最好使用函数.on()和.off()以及一个命名空间(见文档)。
使用.on()
创build事件,使用.on()
将其删除。 您也可以创build一个全局对象,如g_specific_events_set = {};
避免重复:
$('#alert').click(function() { alert('First alert!'); }); g_specific_events_set = {}; add_specific_event = function(namespace) { if (!g_specific_events_set[namespace]) { $('#alert').on('click.' + namespace, function() { alert('SECOND ALERT!!!!!!'); }); g_specific_events_set[namespace] = true; } }; remove_specific_event = function(namespace) { $('#alert').off('click.' + namespace); g_specific_events_set[namespace] = false; }; $('#add').click(function(){ add_specific_event('eventnumber2'); }); $('#remove').click(function(){ remove_specific_event('eventnumber2'); });
div { display:inline-block; vertical-align:top; margin:0 5px 1px 5px; padding:5px 20px; background:#ddd; border:1px solid #aaa; cursor:pointer; } div:active { margin-top:1px; margin-bottom:0px; }
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> <div id="alert"> Alert </div> <div id="add"> Add event </div> <div id="remove"> Remove event </div>
@Amirali
console.log(document.getElementById("SAVE_FOOTER")); document.getElementById("SAVE_FOOTER").attribute("onclick","console.log('c')");
抛出:
Uncaught TypeError: document.getElementById(...).attribute is not a function
在铬。
元素存在并被转储到控制台中;