为什么$(元素)不能直接起作用。但在功能

时间:2016-08-30 09:19:28

标签: php jquery ajax

当我尝试选择任何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> 中选择元素。即使他们没有延迟执行功能

2 个答案:

答案 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完成的时间。