Заменить Jquery attr с цитатой не работает в IE

72
11

Ниже код работает отлично в FF, но IE бросает ошибку, потому что функция onclick содержит в себе цитату. Как сделать эту работу в IE?

Я делаю что-то вроде этого

<a href="#" onclick="add('1','val1')" id="link1">Link1</a>
<a href="#" onclick="add('2','val2')" id="link2">Link2</a>

<script>
function add(id,val) {
//do something
$('#link'+id).attr('onClick',$('#link'+id).attr('onClick').replace("add","remove"));
}

function remove(id,val) {
//do something
$('#link'+id).attr('onClick',$('#link'+id).attr('onClick').replace("remove","add"));
}
</script>

Пример: после нажатия ссылки1 ссылка должна быть обновлена до ниже

<a href="#" onclick="remove('1','val1')" id="link1">Link1</a>

спросил(а) 2012-01-06T23:04:00+04:00 8 лет, 9 месяцев назад
1
Решение
70

изменил onclick на href и вуаля, он тоже работает в IE.

ответил(а) 2012-01-11T03:50:00+04:00 8 лет, 9 месяцев назад
41

Вероятно, это помогает:

function add(id,val) {

$('#link'+id).attr('onClick',function (i, click) {
var str = new String(click);
return str.replace("add","remove");
});
}

ответил(а) 2014-01-10T09:02:00+04:00 6 лет, 9 месяцев назад
41

Это может сработать:

var $link = $('#link');
var click = $link.attr('onClick');

$link.removeAttr('onClick');
$link.click(function() {
eval(click.replace("XYZ","abc"));
});

Но я настоятельно рекомендую вам прекратить использование onClick и начать привязывать события с помощью jQuery. Если бы вы могли опубликовать код в onClick, я мог бы преобразовать его в стандартные объекты и функции jQuery.

ответил(а) 2012-01-06T23:48:00+04:00 8 лет, 9 месяцев назад
41

У IE есть проблемы с этим, вы можете попробовать использовать .prop- метод, который лучше работает в IE. Тем не менее, вы всегда будете вызывать проблемы IE, связанные с изменением обработчиков событий.


Было бы лучше каждый раз вызывать одну и ту же функцию и просто сохранять состояние где-то на странице, даже в атрибуте, таком как переключение класса между "добавлением" и удалением.

ответил(а) 2012-01-06T23:25:00+04:00 8 лет, 9 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема