Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么这个img元素没有被javascript修改?_Javascript_Jquery - Fatal编程技术网

为什么这个img元素没有被javascript修改?

为什么这个img元素没有被javascript修改?,javascript,jquery,Javascript,Jquery,我正在尝试更改img标记的src属性,根据ajax请求的结果进行解预测。这个请求返回一个json,一切正常。如果测试到达了代码的正确部分,它会在浏览器控制台上显示预期的输出,但是src属性没有被更改 我已尝试通过以下方式删除此img元素: $('#l'+generatedId).remove(); 然后通过执行以下操作在父元素内创建一个新元素: $('#msgid'+generatedId).append('<img id="l'+generatedId+'" src="newpath

我正在尝试更改img标记的src属性,根据ajax请求的结果进行解预测。这个请求返回一个json,一切正常。如果测试到达了代码的正确部分,它会在浏览器控制台上显示预期的输出,但是src属性没有被更改

我已尝试通过以下方式删除此img元素:

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