Jquery回调函数变量总是本地的

Jquery callback function variables always local?

本文关键字:回调 函数 变量 Jquery      更新时间:2023-09-26

为什么我不能将$('#temizle').inerHTML设置为字符串'Temizlendi';代码破解根本不起作用。但在比赛结束前,我可以设置它。我很困惑。

        $('#temizle').click(function(){
            $.post('OdbcConnection.php',
                {islem: 'Temizle'},
                function(data, status){
                    if(status == 'success'){
                        alert(status);
                        $('#temizle').innerHTML = 'Temizlendi';
                    }else{
                        this.innerHTML = 'Hata Var';
                    }
                });
            //this.innerHTML = 'Temizlendi';
        });

简单的答案是因为innerHTML是本机DOM节点方法,而不是jQuery方法,因此在诸如$('#temizle')之类的jQuery对象上调用它只会在jQuery对象中设置一个新的innerHTML属性。它在$.post调用之外工作,因为this继承了本机DOM节点,而不是jQuery对象。

尝试使用$.html()方法而不是innerHTML:

$('#temizle').html('Temizlendi');

或者,也可以将$.post范围之外的内容从this.innerHTML重写为$(this).html(),因为封装this会将其转换为jQuery对象。

如果您必须使用innerHTML而不是jQuery方法,如其他答案中所述,您也可以通过使用get()方法或访问jQuery对象的0索引处的节点从jQuery对象获得DOM节点:

$( '#temizle' ).get(0).innerHTML = 'Foo';
$( '#temizle' )[0].innerHTML = 'Bar';

尽管这会有点违背使用jQuery的目的。

需要记住的另一件事是,this的值取决于当前作用域,因此当在$.post内部调用this时,它将不等于您的元素。为了解决这个问题,你可以将你的元素缓存在你的后调用范围之外,这样你就可以很容易地在回调中引用它:

$('#temizle').click(function(){
    var $el = $( this );
    $.post('OdbcConnection.php',
        {islem: 'Temizle'},
        function(data, status){
            if(status == 'success'){
                alert(status);
                $el.html( 'Temizlendi' );
            }else{
                $el.html( 'Hata Var' );
            }
        });
    //$el.html( 'Temizlendi' );
});

为了更好地了解this,我强烈建议在这里查看它的MDN参考资料。

是否调用了alert(status)?如果不是,这只是意味着您的POST请求失败。

如果它确实失败了,请检查php文件的路径是否正确。你现在拥有的是一条相对的道路,也许你需要把它变成一条绝对的道路,即:将'OdbcConnection.php'更改为'/OdbcConnection.php''/{SOME_FOLDER}/OdbcConnection.php'

首先必须编写

$('#temizle').html('Temizlendi')  //not   $('#temizle').innerHTML='Temizlendi'  

或者你可以使用

$('#temizle')[0].innerHTML='emizlendi'

第二:你使用

this.innerHTML = 'Hata Var';

但是"this"是针对函数的,而不是针对$('#temizle')元素

当您使用$('#temizle').InnerHTML时,您正在调用方法InnerHTMLtml()方法:$('#temizle')html('emizlendi');