为什么我不能将$('#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';
});
答案 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);