2010-12-07 2 views
5

У меня есть фрагмент javascript, который отображает виджет на моей странице. Есть некоторые ссылки, которые выводятся по сценарию, которые выглядят так:Изменение события onclick с помощью jQuery

<a href="#" onclick="somefunction()">Link</a> 

Эти ссылки заставляют некоторых JS стрелять. Замечательно. Проблема заключается в том, что href="#" и отсутствие "return false;" в конце атрибута onclick.

Когда я нажимаю одну из этих ссылок, браузер переходит к началу документа. С виджетами, расположенными близко к нижней части документа, это нехорошо.

К сожалению, я не контролирую вывод сценария.

Использование jQuery Я могу ссылаться на эти ссылки, используя $("#wxheader ul li a"). Я пробовал следующий код, но он не работает:

$(document).ready(function(){ 
    $("#wxheader ul li a").each(function(){ 
     var onclick = $(this).attr("onclick") + "; return false;"; 
     $(this).attr("onclick", onclick); 
    }); 
}); 

Я хочу написать функцию JQuery, который будет меняться каждый OnClick атрибут для добавления "return false;" и он должен работать после того, как скрипт вывода контента на странице ,

Любые идеи?

ответ

4

Попробуйте это. Хитрость заключается в вызове preventDefault в обработчике, что предотвращает распространение действия элемента по умолчанию. Надеюсь, это поможет.

$("#wxheader ul li a").click(function(e){ 
    e.preventDefault(); 
    return false; 
}); 
+0

LOL ... Что со всеми поданными голосами? – James 2010-12-07 20:22:01

+0

понятия не имею о этих downvotes. Понимает, что ваши конкуренты не хотят, чтобы вы получали кредит. Твой был самый быстрый ответ, который сделал то, что мне нужно. – Jazzerus 2010-12-07 20:27:23

2

Вы должны быть в состоянии изменить его в JQuery, попробуйте следующее:

$("#wxheader ul li a").each(function(){ 
    $(this).click(function(e) { 
     e.preventDefault(); 
    }); 
}); 

Это останавливает нормальный процесс событие щелчка.

Fixed, это будет эффективно остановить интерпретацию по умолчанию браузера события щелчка

+0

Это неправильно, `each` пересекает множество JQuery, она не связывает событие щелчка. – 2010-12-07 20:16:23

+0

Это не сработает, так как там нет события! – RobertPitt 2010-12-07 20:17:39

+0

Вы правы, я скопировал его код слишком быстро, редактируя его. – 2010-12-07 20:24:57

2

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

<a href="javascript:void(0)" onclick="somefunction()">Link</a> 
2

Я хотел бы сделать это как этот

$('#wxheader ul li a').each(function(i, element) 
{ 
    // Capture the existing callback function 
    var originalCallback = element.onclick; 

    // Now, remove it from the elemnet 
    element.onclick = null; 

    // And replace it with our own, which calls the orignal 
    // with the proper context, and prevents the default 
    // event action 
    $(element).click(function(event) 
    { 
    event.preventDefault(); 
    originalCallback.call(window); 
    }); 
}); 
2

ВИскать к объекту preventDefault в JQuery.

http://api.jquery.com/event.preventDefault/

Это позволит ему не запущенн или также добавление возврата ложного в обработчик щелчка JQuery. preventDefault может не работать в Firefox. Я не совсем уверен.

$("#wxheader ul li a").click(function(){ 
    //do stuff// 
    return false; 
}); 

Это тестовая страница, которую я сделал с некоторой функциональностью ajax по ссылке для тех, кто пытается переопределить обычный щелчок. это функциональность, о которой я говорю, если это то, что вы ищете.

http://testing.kobbyappiah.com/Design_and_Evolve/ajaxTest.html

Смежные вопросы