2016-10-06 3 views
1

Извините за мой английский.Img click() после изменения img ID

У меня есть стол со столбцом фаворитов, который содержит изображение: fav_on или fav_off, а его id - fav_on или fav_off.

Когда я нажимаю, я меняю идентификатор (если я проверяю DOM, если firefox правильно изменил идентификатор), но если я снова нажму, произойдет событие, связанное со старым идентификатором.

Может кто-нибудь мне помочь?

спасибо

<table> 
    <tr id="1"> 
     <td id="fav_ali" data-fav_ico="0"><img src="img/tmp.png" id="fav_off" class="img_btn" title="add to fav"/></td> 
     <td id="des_ali" class="cg_ott">aaaa</td> 
    </tr> 
    <tr id="2"> 
     <td id="fav_ali" data-fav_ico="1"><img src="img/tmp.png" id="fav_on" class="img_btn" title="del from fav"/></td> 
     <td id="des_ali" class="cg_na">aaaaa</td> 
    </tr>  
</table> 
$('#fav_off').on("click", function (e) { 
    e.preventDefault(); 
    console.log("Fav Off click"); 
    //change DB... 
    this.id = "fav_on"; 
}); 

$('#fav_on').on("click", function (e) { 
    e.preventDefault(); 
    console.log("Fav On click"); 
    //change DB... 
    this.id = "fav_off"; 
}); 
+0

Не используйте идентификатор. Это не то, для чего. Вы должны использовать для этого класс. Кроме того, вы не можете иметь кратность идентификатора на странице. 'fav_ali' и' des_ali' также должны быть классами. В-третьих, идентификатор не может начинаться с числа. Вам нужно изменить идентификатор строк таблицы, чтобы они начинались с буквы. – Styphon

ответ

2

Во-первых, не изменить id атрибуты во время выполнения, поскольку они предназначены, чтобы быть статичным. Вместо этого используйте классы.

Во-вторых, причина, по которой ваш код не работает, поскольку вы ожидаете, потому что вы прикрепляете обработчики событий при загрузке. Изменение id не влияет на обработчики событий, которые уже находятся на элементе. Чтобы выполнить то, что вам нужно, используйте делегированный обработчик событий. Попробуйте это:

$(document).on('click', '.fav_off, .fav_on', function() { 
 
    if ($(this).hasClass('fav_off')) { 
 
    console.log('Fav Off click'); 
 
    } else { 
 
    console.log('Fav On click'); 
 
    } 
 

 
    $(this).toggleClass('fav_off fav_on'); 
 
    //change DB... 
 
});
.fav_on { 
 
    border: 1px solid #c00; /* just to make the effect more obvious */ 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table> 
 
    <tr id="1"> 
 
    <td id="fav_ali" data-fav_ico="0"> 
 
     <img src="img/tmp.png" class="img_btn fav_off" title="add to fav" /> 
 
    </td> 
 
    <td id="des_ali" class="cg_ott">aaaa</td> 
 
    </tr> 
 
    <tr id="2"> 
 
    <td id="fav_ali" data-fav_ico="1"> 
 
     <img src="img/tmp.png" class="img_btn fav_on" title="del from fav" /> 
 
    </td> 
 
    <td id="des_ali" class="cg_na">aaaaa</td> 
 
    </tr> 
 
</table>

+0

супер! Спасибо! – pigobyte

+0

Я использую решение с $ (". Img_btn # btn_fav_on_off"). Click (function() {.. потому что эта таблица находится в сложном диалоге, который загружается родительской страницей .. – pigobyte

+0

oops! .. Новая проблема .. если я динамически добавляю новую строку, щелчок на изображениях новой строки не работает. :(Вы знаете, как мне помочь – pigobyte

0

вы могли бы сделать это

$('.img_btn').on("click", function (e) { 
    e.preventDefault(); 
    //change DB... 
    console.log(this.id); 
    if (this.id == "fav_on") { 
    this.id = "fav_off"; 
    } else { 
    this.id = "fav_on"; 
    } 
}); 
Смежные вопросы