2012-01-19 1 views
1

В этом скрипте, когда нажата ссылка «Показать», и отображается изображение предварительного просмотра, текст ссылки должен измениться на «Скрыть». Он работает только после третьего нажатия.JQuery изменить текст при нажатии «показать» или «скрыть»

<span id='previewLinks'><br/><a id='showPreview' title='".get_option('my_theme')."'>Show</a> 

$('#showPreview').click 
(
    function(e) 
    { 
    var myImage = $('#my_theme :selected').val(); 
    $('#largePreview').slideToggle(0, function() { 
     $('#showPreview').text($(this).is(':visible') ? 'Hide' : 'Show'); 
    }); 
    $('#largePreview').attr('src', '<?php echo get_bloginfo('template_directory') ?>/styles/'+myImage+'/screenshot-help.jpg'); 
    } 
); 
+0

Является ли '# largePreview' первоначально показанным или скрытым? –

+0

Любая причина, по которой вы используете 'slideToggle' с длительностью нуля вместо' hide() '? – Jasper

ответ

2

вы можете попробовать это:

$('#showPreview').click(
    function(e) { 
    var myImage = $('#my_theme :selected').val(); 
    $('#largePreview').slideToggle(0, function() { 
     $('#showPreview').text($(this).is(':visible') ? 'Hide' : 'Show'); 
    }); 
    $('#largePreview').attr('src', '<?php echo get_bloginfo('template_directory') ?>/styles/'+myImage+'/screenshot-help.jpg'); 
    }).click(); 
+0

@Scott B здесь я добавляю начальный 'click()' – thecodeparadox

1

Причина, по которой не работает изначально, потому что #largePreview должен иметь дисплей состояние противоположное от того, что вы берете на себя. Это изменение может исправить. Обратите внимание на !

$('#showPreview').text(!$(this).is(':visible') ? 'Hide' : 'Show'); 

Или вы, возможно, потребуется изменить CSS для #largePreview.

+0

Это своего рода антиинтуитивный, не так ли? 'IF hidden THEN output" hide "', 'IF visible Then output" show "'. – Jasper

+0

@ Джаспер - да, я ответил на такой вопрос несколько дней назад, и пользователь действительно хотел этого. Меня смутило, но я думаю, что некоторые люди так смотрят. – mrtsherman

0

просто выяснить, что вы сделали не так:

See example here.
1. Использование

$(document).ready(function(){ 
}); 

2. <a href="javascript:;"> TEXT </a> will give you a right anchor
Надежда это помогает! Благодаря Джаспере Слишком.

+1

'$ (this) .filter (": visible ")' всегда возвращает true, поэтому текст всегда установлен на «Скрыть». Использование '.is()' вместо '.filter()' вернет 'true' /' false': '$ (this) .is (": visible ")'. Вы также можете проверить свойство 'length' объекта jQuery после фильтрации до только видимых элементов:' $ (this) .filter (": visible"). Length> 0'. Вот обновленная версия вашего jsfiddle: http://jsfiddle.net/Dgc3t/5/ – Jasper

+0

Вы правы! – workdreamer

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