我创建了一个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');
}
});
});
答案 0 :(得分:160)
您可以使用jQuery轻松更改元素的onclick
事件,而无需使用以下命令运行新函数:
$("#id").attr("onclick","new_function_name()");
通过撰写此行,您实际上会更改onclick
的{{1}}属性。
您也可以使用:
#id
答案 1 :(得分:24)
删除旧的事件处理程序
jQuery('#id').unbind('click');
并附上新的
jQuery('#id').click(function(){
// your code here
});
答案 2 :(得分:10)
更新这篇文章(2015):unbind / bind不应再用于jQuery 1.7+。而是使用函数off()。 示例:
$('#id').off('click');
$('#id').click(function(){
myNewFunction();
//Other code etc.
});
请确保在.click中调用非参数函数,否则将被忽略。
答案 3 :(得分:4)
$('#id').attr('onclick', 'function()');
现在(2015年7月11日)此解决方案仍在运行(jquery 2.1.4);在我看来,这是最好的选择。
答案 4 :(得分:1)
如果您想使用jQuery更改一个特定的onclick事件,最好将函数.on()和.off()与命名空间一起使用(参见文档)。
使用.on()
创建活动,使用.off()
将其删除。您还可以创建一个全局对象,如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>
答案 5 :(得分:1)
(2019)我使用了$('#'+id).removeAttr().off('click').on('click', function(){...});
我尝试了$('#'+id).off().on(...)
,但是每次调用onClick属性都要重置时,都无法重置它。
我使用.on('click',function(){...});
来避免不得不引用阻止我所有的JavaScript函数。
O.P。现在可以使用:
$(this).removeAttr('onclick').off('click').on('click', function(){
displayCalendar(document.prjectFrm[ia + 'dtSubDate'],'yyyy-mm-dd', this);
});
这是我的div是通过静态设置onClick属性设置的:
<div onclick = '...'>
否则,如果我只动态地添加了一个侦听器,则应该使用$('#'+id).off().on('click', function(){...});
。
在没有off('click')的情况下,不会替换我的onClick侦听器。
答案 6 :(得分:-1)
@Amirali
Uncaught TypeError: document.getElementById(...).attribute is not a function
抛出:
$(document).on('click', '.fa', function() {
$(this).siblings('select :selected').change();
});
in chrome。
元素存在并被转储到控制台中;