2013-08-23 3 views
0

Когда я нажимаю на ссылку, он получает класс, выбранный после того, как он получает этот класс, его нужно отключить, пока он не потеряет класс «выбран», но он не может повлиять на другие li без класса или с не класс «ни один»отключить ссылку после ее выбора

function abrePlanta(idPlanta, desc, image){ 
    h = screen.height; 

    if ($('li').hasClass("selected")) { 
     return false; 
    } 

    $('#image_preview').html('<img src="../interface_test/images/loading.gif" />'); 
    $('ul li.selected').removeClass('selected').addClass('none'); 
    $(this).closest('li').addClass('selected').removeAttr("disabled"); 

    if(h >= 960){ 
     size = 100; 
    } else if(h < 960){ 
     size = 90; 
    } 

    $.get('2.php', { id_planta: idPlanta, size: size }, function(img){ 
     $('#image_preview').html(img); 
    }); 
    $('#description').html(desc); 
    $("#imagezoom").attr("src", "../../images/plantas/sso/" + image); 
    return false; 
} 

<li><a href='javascript:void(0);' onclick="return abrePlanta.call(this, 2, "text", "image.jpg")"></a></li> 

и он не работает event.preventDefault

я использую onclick с функцией

+0

Но когда вы нажимаете на ссылку, браузер не будет следовать этой ссылке в любом месте, на которое он указывает? – adeneo

+0

no .. это ajax, и он не может активировать ajax дважды в той же ссылке @adeneo –

+0

Но тогда у вас уже есть другой обработчик события для этого элемента для вызова ajax, а создание нового обработчика, который возвращает false, не будет работать? – adeneo

ответ

3

трудно сказать, не видя больше кода, но на первый взгляд

Изменение:

if($(this).hasclass('selected')){ 

в

if($(this).hasClass('selected')){ 

капитал C в hasClass

Кроме того, на основе вашего редактирования, прямо сейчас вы проверяете все li элементы документа для выбранный класс:

if ($('li').hasClass("selected")) { 
    return false; 
} 

Вы должны просто проверить, что li, который обертывает a, который нажал, если я понимаю, что вы просите. Так что сделайте что-нибудь подобное (это предполагает, что idPlanta является ссылкой js на ссылку, на которую нажимается, что похоже на то, что вы пытаетесь, но не может быть уверенным, потому что ваш код не компилировался в js скрипке, когда Я пытался построить его),

if ($(idPLanta).parent().hasClass("selected")) { 
    return false; 
} 
+0

Я сделал это и все еще не работал –

+1

, как я сказал, трудно сказать, не видя больше вашего кода. Однако я указал на определенную проблему. Если вы хотите получить более краткий ответ, напишите js скрипку или полный код. – Rooster

+0

@ EddieD. см. мой отредактированный ответ, даже если это не решит вашу проблему полностью, оно должно по крайней мере позволить вам перейти к следующей части. – Rooster

1

Вот JSFiddle, который может помочь вам понять некоторые вещи ...


Ваша проблема в том, где вы объявляете функцию:

<a href="#" onclick="myfunction()">test2</a> 

Это будет вызовите функцию (которая возвращает true/false), но она ничего не делает с ней. Для отмены бульканье событий, необходимо возвращать результаты функции:

<a href="#" onclick="return myfunction()">test2</a> 

Это вернет «ложь» из функции, которая отменит естественное событие щелчка.

+0

даже с использованием другого имени он все еще не работает .. когда я использую это, если моя функция перестает работать –

+0

нет .. я использовал ее только в моем вопросе @Richard –

+0

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

0
if($(this).hasClass('selected')){ 
    $(this).attr("disabled","disabled"); 
    return false; 
} 
else { 
    return true; 
} 

$('ul li.selected').removeClass('selected').addClass('none'); 
$(this).closest('li').addClass('selected').removeAttr("disabled"); 

<li><a href="#" onclick="function()">test</a></li> 
<li><a href="#" onclick="function()">test2</a></li> 
+0

с этим кодом. Я нажимаю ссылки и ничего не происходит –