为什么这个img元素没有被javascript修改?
我正在尝试更改img标记的src属性,根据ajax请求的结果进行解预测。这个请求返回一个json,一切正常。如果测试到达了代码的正确部分,它会在浏览器控制台上显示预期的输出,但是src属性没有被更改 我已尝试通过以下方式删除此img元素:为什么这个img元素没有被javascript修改?,javascript,jquery,Javascript,Jquery,我正在尝试更改img标记的src属性,根据ajax请求的结果进行解预测。这个请求返回一个json,一切正常。如果测试到达了代码的正确部分,它会在浏览器控制台上显示预期的输出,但是src属性没有被更改 我已尝试通过以下方式删除此img元素: $('#l'+generatedId).remove(); 然后通过执行以下操作在父元素内创建一个新元素: $('#msgid'+generatedId).append('<img id="l'+generatedId+'" src="newpath
$('#l'+generatedId).remove();
然后通过执行以下操作在父元素内创建一个新元素:
$('#msgid'+generatedId).append('<img id="l'+generatedId+'" src="newpath" />');
--Edit1:
伙计们,我在if“ok”条件中添加了一些代码
console.log('Before:'+$('#l'+generatedId).attr('src'));
$('#l'+msgnova).attr('src','url/msgok.png');
console.log('After:'+$('#l'+generatedId).attr('src'));
The result is First: undefined / After: undefined. So I guess the element is not being found. So the conlusio is the element is not in the DOM. Does anyone had this problem? I also tried to create the <p> parent first and then append the <img> but it doesn't work also.
console.log('Before:'+$('#l'+generatedId.attr('src'));
$('#l'+msgnova.attr('src','url/msgok.png');
console.log('After:'+$('#l'+generateId.attr('src'));
结果是First:undefined/之后:undefined。所以我猜元素没有被找到。因此conlusio是不在DOM中的元素。有人有这个问题吗?我还尝试先创建父对象,然后再附加属性,但也不起作用。
当您试图通过在父元素中创建子元素时
$('#parentElement'+generatedId).append('<img id="#img'+generatedId+'" src="newpath" />');
$('#parentElement'+generateId).append('');
确保父节点实际存在,否则append()
方法将无法工作。可以尝试先创建$(“#parentElement”+generateId)
此元素(通过追加),然后追加子图像。我会对此发表评论,但还没有这些特权。希望这能有所帮助。在附加img标记时删除#in id属性。您不希望实际的id属性中包含“#”,它只作为jquery选择器需要:
$('msgid'+generateId).append('')代码>$。ajax
是异步的,您有generatedId++代码>就在ajax请求之后。更改src后,需要将其移动到success函数中
当您的POST响应返回时,您的generatedId已经增加,并且无法在DOM中找到generatedId
$.ajax({
data: $('#enviaChat').serialize(),
url: 'assets/lib/msg.php',
type: 'POST',
cache: false,
success:function(data){
var msgReturn = JSON.parse(data);
console.log(data);
if(msgReturn.status=='ok'){
$('#l'+generatedId).attr('src','url/ok.png');
generatedId++; // move here
}
}
});
我认为这是一个范围问题,出于某种原因,success块无法使用jquery选择器“查看”元素。解决方案是创建一个变量并将其上的元素作为属性:
var generatedId=0;
function doSomething(){
$('#msg').append('<p class="msg2" id="msgid'+generatedId+'" data-sid="msgid'+generatedId+'">'+$('#msgtxt').val()+'<img id="l'+generatedId+'" src="url/load.svg" /></p>');
**var createdElem = $('#l'+generatedId);**
$.ajax({
data: $('#enviaChat').serialize(),
url: 'assets/lib/msg.php',
type: 'POST',
cache: false,
success:function(data){
var msgReturn = JSON.parse(data);
console.log(data);
if(msgReturn.status=='ok'){
//line below was altered
createdElem.attr('src','url/ok.png');
//instead of $('#l'+generatedId).attr('src','url/ok.png');
}
}
});
generatedId++;
}
var generateId=0;
函数doSomething(){
$('#msg').append(''+$('#msgtxt').val()+'
');
**var createdElem=$('#l'+generateId)**
$.ajax({
数据:$('#enviaChat')。序列化(),
url:'assets/lib/msg.php',
键入:“POST”,
cache:false,
成功:功能(数据){
var msgReturn=JSON.parse(数据);
控制台日志(数据);
如果(msgReturn.status=='ok'){
//下面的一行被修改了
createdElem.attr('src','url/ok.png');
//而不是$('#l'+generateId).attr('src','url/ok.png');
}
}
});
generatedId++;
}
如果您console.log($('#l'+generateId).attr('src'))
如果json数据确实是预期数据,那么您的代码应该可以工作。是否尝试将console.log()
(或调试器断点)放置在if
语句中,以检查条件的计算结果是否符合预期?是否确定DOM中存在$('#l'+generatedId)
?是的,如您所见,generatedId的第一个值为0,然后增加1。当我运行console.log($('#l0').attr('src'))时,它返回图像的完整url。@Bergi您看到我的编辑了吗?正在执行console.log($('#l'+generatedId.attr('src'));在if“ok”块内,它返回undefined。所以我猜元素不在DOM中。你知道DOM中没有什么吗?很抱歉,它在实际代码中不存在。我试图附加父项而不是子项,但问题仍然存在。不,不是这个。generatedId在函数末尾增加。我认为问题在于范围,我用解决方案回答了这个问题。无论如何谢谢你。你怎么知道这不是你问题中的问题?你试过这个吗?您拥有的解决方案是一种更好的解决方法,它通过创建一个局部变量来在ajax请求解决时获取引用,但这并不是一个范围问题。generatedId的第一个值是0,问题正好发生在第一次执行时,因此元素的id为l0,即使使用相同的id也无法工作。我评论了我的解决方案,并尝试了你的解决方案,但没有成功。正如我所说,我不知道是否是范围,我认为它是LOL。
$.ajax({
data: $('#enviaChat').serialize(),
url: 'assets/lib/msg.php',
type: 'POST',
cache: false,
success:function(data){
var msgReturn = JSON.parse(data);
console.log(data);
if(msgReturn.status=='ok'){
$('#l'+generatedId).attr('src','url/ok.png');
generatedId++; // move here
}
}
});
var generatedId=0;
function doSomething(){
$('#msg').append('<p class="msg2" id="msgid'+generatedId+'" data-sid="msgid'+generatedId+'">'+$('#msgtxt').val()+'<img id="l'+generatedId+'" src="url/load.svg" /></p>');
**var createdElem = $('#l'+generatedId);**
$.ajax({
data: $('#enviaChat').serialize(),
url: 'assets/lib/msg.php',
type: 'POST',
cache: false,
success:function(data){
var msgReturn = JSON.parse(data);
console.log(data);
if(msgReturn.status=='ok'){
//line below was altered
createdElem.attr('src','url/ok.png');
//instead of $('#l'+generatedId).attr('src','url/ok.png');
}
}
});
generatedId++;
}