Подтвердить что ты не робот

Как изменить событие onclick с jquery?

Я создаю файл js, в котором я создаю динамическую таблицу и динамически изменяю событие клика для календаря, но называя изображение календаря для динамически созданной таблицы, всплывающее окно календаря в предыдущем календарном изображении. Пожалуйста, помогите мне

код

/***------------------------------------------------------------
* 
*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');
        }
    });
});
4b9b3361

Ответ 1

Вы можете легко изменить событие onclick элемента с помощью jQuery, не запуская новую функцию с помощью:

$("#id").attr("onclick","new_function_name()");

Написав эту строку, вы фактически измените атрибут onclick в #id.

Вы также можете использовать:

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

Ответ 2

Удалить старый обработчик событий

jQuery('#id').unbind('click');

И добавьте новый

jQuery('#id').click(function(){
    // your code here
});

Ответ 3

Обновление этого сообщения (2015): unbind/bind больше не следует использовать с jQuery 1.7+. Вместо этого используйте функцию off(). Пример:

$('#id').off('click');
$('#id').click(function(){
    myNewFunction();
    //Other code etc.
});

Убедитесь, что вы вызываете непараметрическую функцию в .click, иначе она будет проигнорирована.

Ответ 4

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

Сейчас (11 июля 2015 г.) это решение все еще работает (jquery 2.1.4); на мой взгляд, это лучший выбор.

Ответ 5

Если вы хотите изменить одно конкретное событие onclick с помощью jQuery, лучше использовать функции . 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>

Ответ 6

(2019) Я использовал $('#'+id).removeAttr().off('click').on('click', function(){...});

Я попытался $('#'+id).off().on(...), но сбрасывать атрибут onClick при каждом вызове для сброса не получится.

Я использую .on('click',function(){...});, чтобы избежать необходимости заключать в кавычки блокировку всех моих функций JavaScript.

О.П. теперь может использовать:

$(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(){...});.

Без выключения ('click') мои слушатели onClick были добавлены, а не заменены.

Ответ 7

@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

в хроме.

Элемент существует и сбрасывается в консоли;