как изменить событие onclick с помощью jquery?
Я создал JS-файл, в котором я создаю динамическую таблицу и динамически изменяю событие click для календаря, но onclicking изображение календаря для динамической сгенерированной таблицы, всплывающее окно календаря в предыдущем изображении календаря. Пожалуйста, помогите мне
код
/***------------------------------------------------------------
*
*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');
}
});
});
6 ответов:
вы можете легко изменить
onclick
событие элемента с jQuery без запуска новой функции с:$("#id").attr("onclick","new_function_name()");
написав эту строку, вы фактически измените
удалить старый обработчик события
jQuery('#id').unbind('click');
и прикрепить новый
jQuery('#id').click(function(){ // your code here });
обновление этого сообщения (2015): unbind/bind больше не должен использоваться с jQuery 1.7+. Вместо этого используйте функцию off (). Пример :
$('#id').off('click'); $('#id').click(function(){ myNewFunction(); //Other code etc. });
убедитесь, что вы вызываете непараметрическую функцию.нажмите, иначе он будет проигнорирован.
$('#id').attr('onclick', 'function()');
прямо сейчас (11 июля 2015 г.) это решение все еще работает (jquery 2.1.4); на мой взгляд, это лучший выбор.
если вы хотите изменить одно конкретное событие onclick с помощью jQuery, то лучше использовать функции .on () и .выкл() в пространстве имен (см. документацию).
использовать
.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>