2013-04-13 2 views
-1

Я использую метод .replace для замены функции onclick на теге привязки, но он не работает..replace in JavaScript/jQuery

<script type="text/javascript"> 
$(function(){ 
var htm= $('.jitu').html(); 
htm.replace("show()",'showme()'); 
}) 
</script> 

<div class="jitu"><a href="#" onclick="show()">me</a> </div> 
+0

Почему «onclick» там, в первую очередь, если вы хотите его немедленно заменить? Почему вы используете 'onclick' вместо' .bind() 'или' .on() '? –

+0

Вы имеете в виду [.replaceWith()] (http://api.jquery.com/replaceWith/)? –

ответ

1

Вы должны использовать: -

$('.jitu a').attr('onclick','showme()'); 

http://jsfiddle.net/Fxfvn/

Объяснение на код: - Что вы делаете, просто заменить строку не реальный DOM. Также это не идеальный способ изменить атрибут. здесь html является просто строкой html и не содержит ссылок ...

var htm= $('.jitu').html(); 
htm.replace("show()",'showme()'); 

Поскольку вы используете jquery. Вы можете напрямую связать

$('.jitu a').removeAttr('onclick').click(showme); //(if you have onclick. to avoid duplicate alert) 

еще

$('.jitu a').click(showme); 
-1

Это должно сделать трюк:

htm.onclick = function() { showme(); }; 
0

Другой подход:

$('.jitu').find('[onclick="show()"]').attr('onclick', 'showme()'); 

http://jsfiddle.net/CfpBP/

Однако вам следует использовать более ненавязчивый способ привязки событий. Например:

$('.jitu a').click(showme); 
0

Выполнение замены строки не делает ничего, если вы не применяете окончательное значение к элементу; это будет работать, но я бы не рекомендовал его:

var $jitu = $('.jitu'); 
$jitu.html($jitu.html().replace('show()', 'showme()')); 

Более правильным способом является отцепить старый onclick и заменить его на новый обработчик щелчка:

$('.jitu > a') 
    .prop('onclick', null) 
    .on('click', showme); 

Demo

Было бы быть даже лучше, если у вас даже не было встроенного onclick="show()" в первую очередь и просто используйте $(element).on(event, fn), чтобы зарегистрировать обработчики ваших кликов.