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

时间:2015-12-27 18:58:50

标签: javascript jquery scope

为什么我不能将$('#temizle')。innerHTML设置为字符串' Temizlendi&#39 ;; 代码打击不起作用。但在结束前我可以设置它。我很困惑。

        $('#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';
        });

4 个答案:

答案 0 :(得分:1)

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

尝试使用$.html()方法代替innerHTML

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

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

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

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

虽然这会破坏使用jQuery的目的。

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

$('#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参考here

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

首先你必须写

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

或者您可以使用

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

第二:你用过

this.innerHTML = 'Hata Var';

但“this”适用于$('#temizle')元素

的功能

答案 3 :(得分:0)

当您使用 $('#temizle')。InnerHTML 时,您正在调用属于DOM对象的方法 innerHTML ,但不是jQuery对象。在这种情况下,您应该使用jQuery的 html()方法: $('#temizle')HTML(' Temizlendi&#39);