繁体   English   中英

jQuery函数在单击内起作用,但单独调用时不起作用

[英]jquery function works inside click but not when called alone

我试图到达使用.html插入的类元素。 当我通过click事件在函数中调用它时,它可以工作,但是当我直接调用它时,它...没有任何想法吗?

$("#textarea).html("<div>Lorem ipusum<span class='note-content'>Note text</span>Lorem ipusum</div>");


function collapseNotes() {
$(".note-content").animate({
    width:"50px",
    opacity: ".3",
}); 
}

//this works
$("#button").click(function() {
    collapseNotes();
});

//this doesn't work
collapseNotes();

您正在调用collapseNotes(); 将内容加载到页面上之前,请记住JavaScript是一种异步语言,在使用它之前,您应该等待准备就绪,例如:

(function($) {
  console.log('DOM Loaded!');
  collapseNotes();
})($);
$(document).ready(function () { 
    collapseNotes();
});

尝试将整个JQuery放入:

$(document).ready(function(){
//your code here
});

应该通过确保加载整个DOM来解决此问题

现场演示

function collapseNotes() {
    $(".note-content").animate({
        width:"50px",
        opacity: "0.3" // extra comma "," removed
    }, 800);           // animation time !
}

$(function(){ // DOM is ready to be manipulated

    // Missing an " $("#textarea) <--- fixed
    $("#textarea").html("<div>Lorem ipusum<span class='note-content'>Note text</span>Lorem ipusum</div>");

    //this works
    $("#button").click(function() {
        collapseNotes();
    });

    //this works
    collapseNotes();

});

试试jQuery ready()函数:

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

根据您的注释,很明显,您是在AJAX回调中创建注释。 您对collapseNotes调用不在回调之外,因此不会等到AJAX请求完成。

您的解决方案是将调用移至AJAX( getJSON )回调内的collapseNotes

$.getJSON('text/1.json', function(data) {
    $("#chapter-text-area").html(data.content);
    collapseNotes(); // place the call here instead!
});

// this is called before the call to $('#chapter-text-area').html, 
// so no notes are found
collapseNotes();

由于AJAX请求是异步的,因此浏览器将在$.getJSON行发送请求,然后立即继续执行下一条指令,即$.getJSON collapseNotes() 不会等待服务器响应该请求,也就是触发回调时。

从单击侦听器执行代码的原因是浏览器有足够的时间在单击按钮之前完成请求(因此创建注释)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM