Jquery - 从getJSON添加动态添加的控件

时间:2010-12-16 18:40:10

标签: jquery json draggable

我在向动态添加元素(在JSON函数内部)中分配控件时遇到问题。

代码工作正常,但是当我添加$('div.prnt')。append(“hello”);在JSON内部,它不会分配$(“div.text”)。draggable();它。当我拿走JSON函数时,我只使用$('div.prnt')。append(“hello”);它可以直接使用。

我想JSON函数在调用可拖动控件之前停止添加元素。

<style>
    div.prnt div.test
    {
        border: 1px solid #000;
        width: 200px;
        height: 200px;
    }
</style>
<script type="text/javascript">
    $(document).ready(function ()
    {
        var serviceurl = "WebServices/BusinessCardStudio.svc/gettextobjects/3457/17/17/1064/709/600/399";

        $.getJSON
        (
            serviceurl,
            function (data)
            {
                $.each(data, function (i, item)
                {
                    $('div.prnt').append("<div class='object text'>hello</div>");
                });
            }
        );

        $("div.text").draggable();
    });
</script>
<div class="prnt">
</div>

有没有人知道解决这个问题的方法?

提前致谢

3 个答案:

答案 0 :(得分:3)

AJAX是异步

getJSON()调用将立即返回,您的draggable()调用将在服务器回复之前运行。

您需要将draggable()来电转移到回调中 这就是回调首先存在的原因。

答案 1 :(得分:1)

在您的JSON请求开始后立即调用

$("div.text").draggable();。然后,服务器以JSON响应并执行您传递给它的函数。所以你正在制作一些尚未存在的可拖动的东西。

将可拖动的调用放入回调函数中,你应该很好。

答案 2 :(得分:1)

在ajax的成功中做到这一点,以便在ajax完成后确保完成它

$.getJSON
            (
                serviceurl,
                function (data)
                {
                    $.each(data, function (i, item)
                    {
                        $('div.prnt').append("<div class='object text'>hello</div>");
                    });
               $("div.text").draggable(); 
               }
            );


        });