当我尝试选择任何ajax调用结果的元素时,不会使用$(element)
选择它
但是当我尝试在任何函数中选择该元素时,它将选择
示例:如果我选择标识为change
的元素。
hello.php
是
<?php
echo '<span id="change"> hello </span>';
?>
<{1}}中的html是
main.php
和main.php中的脚本
<div id="content">
</div>
这个脚本不会改变span的颜色,我知道它不会起作用,因为在执行第二个语句时它们不是id为<script>
$.post("hello.php",function(r,s){$("#content").html(r)});
$("#change").css({"backgroundColor":"red"});
</script>
的元素,
并且change
找不到ID为$("#element")
但是当我在任何功能中尝试change
时,它会改变跨度的颜色。
例如,如果我使用
$("#change")
请注意我将延迟时间设置为0秒。但这可以工作并更改标识为<script>
$.post("hello.php",function(r,s){$("#content").html(r)});
setTimeout(function(){$("#change").css({"backgroundColor":"red"});},0);
</script>
的span的颜色。我的意思是现在change
可以找到ID为$("#change")
如果我在ajax函数中使用$(“#change”),那么它也可以工作。
#change
有人可以解释为什么会发生这种情况,为什么在其他两个例子<script>
$.post("hello.php",function(r,s){$("#content").html(r)});
$.post("example.php",function(r,s){$("#change").css({"backgroundColor":"red"});});
</script>
中选择元素。即使他们没有延迟执行功能
答案 0 :(得分:1)
关于计时。当您从服务器获取内容并尝试将其注入DOM时,将需要一些时间来呈现。当你使用任何值的setTimeout时,你在事件循环中推送内部函数。结果是它将在您指定的最小时间之后执行 - 在您的情况下为0,但仅在堆栈为空时执行。在此期间,事物在DOM中呈现,您可以访问这些元素。您应该观看此视频,以便更好地解释发生了什么:https://www.youtube.com/watch?v=8aGhZQkoFbQ
答案 1 :(得分:0)
这是由于Option Explicit
Sub Test()
Dim ws As Worksheet
Dim btn As Object
Dim strAddressTopLeft As String
Dim strAddressBottomRight As String
Dim strButtonName As String
Set ws = ActiveSheet
For Each btn In ws.Buttons
strAddressTopLeft = btn.TopLeftCell.Address
strAddressBottomRight = btn.BottomRightCell.Address
strButtonName = btn.Name
Debug.Print "Range of button (" & strButtonName & "): " & _
strAddressTopLeft & ":" & _
strAddressBottomRight
Next btn
End Sub
命令的异步性质造成的。在帖子完成之前,脚本的其余部分不会停止。而不是那样,即使post
命令已在进行中,它也会被执行。你使用post
函数做的是你将jquery选择的执行延迟了一小部分时间,这给了timeout
完成的时间。