I have create a js file in which i am creating the dynamic table and dynamically changing the click event for the calendar but onclicking the calender image for dynamic generated table, calendar popup in the previous calendar image. Please help me
code
/***------------------------------------------------------------
*
*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');
}
});
});
This question is related to
jquery
(2019) I used $('#'+id).removeAttr().off('click').on('click', function(){...});
I tried $('#'+id).off().on(...)
, but it wouldn't work to reset the onClick attribute every time it was called to be reset.
I use .on('click',function(){...});
to stay away from having to quote block all my javascript functions.
The O.P. could now use:
$(this).removeAttr('onclick').off('click').on('click', function(){
displayCalendar(document.prjectFrm[ia + 'dtSubDate'],'yyyy-mm-dd', this);
});
Where this came through for me is when my div was set with the onClick attribute set statically:
<div onclick = '...'>
Otherwise, if I only had a dynamically attached a listener to it, I would have used the $('#'+id).off().on('click', function(){...});
.
Without the off('click') my onClick listeners were being appended not replaced.
Updating this post (2015) : unbind/bind should not be used anymore with jQuery 1.7+. Use instead the function off(). Example :
$('#id').off('click');
$('#id').click(function(){
myNewFunction();
//Other code etc.
});
Be sure that you call a non-parameter function in .click, otherwise it will be ignored.
Remove the old event handler
$('#id').unbind('click');
And attach the new one
$('#id').click(function(){
// your code here
});
$('#id').attr('onclick', 'function()');
Right now (11 Jul 2015) this solution is still working (jquery 2.1.4); in my opinion, it is the best one to pick up.
@Amirali
console.log(document.getElementById("SAVE_FOOTER"));
document.getElementById("SAVE_FOOTER").attribute("onclick","console.log('c')");
throws:
Uncaught TypeError: document.getElementById(...).attribute is not a function
in chrome.
Element exists and is dumped in console;
If you want to change one specific onclick event with jQuery, you better use the functions .on() and .off() with a namespace (see documentation).
Use .on()
to create your event and .off()
to remove it. You can also create a global object like g_specific_events_set = {};
to avoid duplicates:
$('#alert').click(function()_x000D_
{_x000D_
alert('First alert!');_x000D_
});_x000D_
_x000D_
g_specific_events_set = {};_x000D_
_x000D_
add_specific_event = function(namespace)_x000D_
{_x000D_
if (!g_specific_events_set[namespace])_x000D_
{_x000D_
$('#alert').on('click.' + namespace, function()_x000D_
{_x000D_
alert('SECOND ALERT!!!!!!');_x000D_
});_x000D_
g_specific_events_set[namespace] = true;_x000D_
}_x000D_
};_x000D_
_x000D_
remove_specific_event = function(namespace)_x000D_
{_x000D_
$('#alert').off('click.' + namespace);_x000D_
g_specific_events_set[namespace] = false;_x000D_
};_x000D_
_x000D_
_x000D_
_x000D_
$('#add').click(function(){ add_specific_event('eventnumber2'); });_x000D_
_x000D_
$('#remove').click(function(){ remove_specific_event('eventnumber2'); });
_x000D_
div {_x000D_
display:inline-block;_x000D_
vertical-align:top;_x000D_
margin:0 5px 1px 5px;_x000D_
padding:5px 20px;_x000D_
background:#ddd;_x000D_
border:1px solid #aaa;_x000D_
cursor:pointer;_x000D_
}_x000D_
div:active {_x000D_
margin-top:1px;_x000D_
margin-bottom:0px;_x000D_
}
_x000D_
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>_x000D_
_x000D_
<div id="alert">_x000D_
Alert_x000D_
</div>_x000D_
<div id="add">_x000D_
Add event_x000D_
</div>_x000D_
<div id="remove">_x000D_
Remove event_x000D_
</div>
_x000D_
Source: Stackoverflow.com