jQuery .click没有启动

时间:2012-08-27 07:23:25

标签: jquery click attr

我有一个链接(imp),当我点击此链接时,它显示一个div。 在这个div上有一个减号来减少这个div。 当我减少这个div时,我会添加一个加号来重新启动这个div。

问题出在加号上。

$('.plusStep1').click(function() {
  $('#plus').empty();
  $('#step1').css('display','block');
  $(".close-step1 img")
    .attr("src", "http://4.bp.blogspot.com/_0AyNA9sRlIs/TAPH55KDj7I/AAAAAAAAIsU/_fjn6O2WguQ/s1600/424px-OCR-A_char_Hyphen-Minus.svg.png");

以上代码似乎仅在我在控制台中执行时才有效!

Here is a test on fiddle

6 个答案:

答案 0 :(得分:1)

.click对动态创建的元素不起作用,如果要将函数绑定到DOM加载后创建的元素,最好使用delegatehttp://api.jquery.com/delegate/ < / p>

所以要将这个函数绑定到所有元素,无论是否在DOM之后创建,你都可以使用类似的东西;

$("#myContainer").on("click", ".PlusStep1", function() {
  $(this).toggleClass("chosen");
});

如果您的所有PlusStep1类元素都是ID为myContainer的元素的子元素(或后代),即它们位于其中,则无论多深都无关紧要。

答案 1 :(得分:0)

.click()未绑定到新创建的元素。您可以创建一个单独的功能,它可以执行您想要的操作(在加号上)以及创建锚点调用时

bind('click', function() {
   seperateFunction();
})

更新:抱歉,live应该更轻松地执行此操作(请参阅jQuery doc

第二次更新:见another stackoverflow post

答案 2 :(得分:0)

将您的选择器更改为$('#plus').click(function() {,因为加号没有plusStep1类,但标识为plus

I saved the updated小提琴

答案 3 :(得分:0)

试试这个

jQuery(function( $ ){

        // Get a reference to the container.
        var containerStep1 = $( "#step1" );

        // Bind the link to toggle the slide.
        $( ".impaye" ).click(
        function( event ){
        // Prevent the default event.
        event.preventDefault();

        // Toggle the slide based on its current
        // visibility.
        if (containerStep1.is( ":visible" )){
        containerStep1.slideUp( 1000 );
        } else {
        containerStep1.slideDown( 1000 );
        }
        }
        );


        // CLOSE STEPS

        $(".close-step1 img").attr("src", "http://4.bp.blogspot.com/_0AyNA9sRlIs/TAPH55KDj7I/AAAAAAAAIsU/_fjn6O2WguQ/s1600/424px-OCR-A_char_Hyphen-Minus.svg.png");
        // STEP 1
        $('.close-step1').click(function () {
            $('#plus').empty();
            $('.close-step1').clone().appendTo('#plus');
            $('#plus .close-step1').addClass('plusStep1');

            containerStep1.slideToggle("slow", function () {
                if ($("#step1").is(':visible')) {
                    $(".close-step1 img").attr("src", "http://4.bp.blogspot.com/_0AyNA9sRlIs/TAPH55KDj7I/AAAAAAAAIsU/_fjn6O2WguQ/s1600/424px-OCR-A_char_Hyphen-Minus.svg.png");
                }
                else {
                    $(".close-step1 img").attr("src", "http://upload.wikimedia.org/wikipedia/commons/3/30/OCR-A_char_Plus_Sign.svg");
                    $('.plusStep1').bind('click',plustep1);
                }

            });
        });
        function plustep1() {
            $('#plus').empty();
            $('#step1').css('display','block');
            $(".close-step1 img").attr("src", "http://4.bp.blogspot.com/_0AyNA9sRlIs/TAPH55KDj7I/AAAAAAAAIsU/_fjn6O2WguQ/s1600/424px-OCR-A_char_Hyphen-Minus.svg.png");

        }


        });

答案 4 :(得分:0)

您也可以使用以下

 $('.plusStep1').live('click',function() {

//---------Your Code----------
})

or 
 $('.plusStep1').bind('click',function() {
//---------Your Code----------
})

答案 5 :(得分:0)

我认为你正在努力实现这一目标。也许以这种方式尝试它会为你效力。

HTML

<a href="#" class="trigger">img</a>

<div id="togglable" style="display:none;">
  <a href="#" class="trigger">Hide me</a>
  content content content
</div>

JS

$(".trigger").click(function() {
  $("#togglable").toggle();
});

然后你可以添加一些逻辑来改变触发元素的src属性,以合并你的+和 - 图像。

好处是不需要实时绑定。