0

似乎在通过 ColorBox(不使用 iframe)加载 Razor 局部视图时,JavaScript 库没有正确初始化或者它是局部的工件。如果我在父页面中包含库,则 JavaScript 函数在部分 jsut 内运行良好。当库处于部分状态时,我没有看到来自浏览器的任何错误,但它不起作用。如果我将库(在这种情况下fileuploader.js)移到部分之外并将函数保留在部分中,它可以正常工作。

例子:

<script src="@Url.ContentArea("~/Scripts/plugins/ajaxUpload/fileuploader.js")" type="text/javascript"></script>

                   <div id="file-uploader">
                        <noscript>
                            <p>
                                Please enable JavaScript to use file uploader.</p>
                        </noscript>
                    </div>


<script>

 $(function () {
        var fileCount = 0;
        var uploader = new qq.FileUploader({
            element: document.getElementById('file-uploader'),
            action: '/Admin/Avatar/AvatarUpload',
            debug: true,
            params: {
                'userId': '@ViewBag.UserId'
            },
            onSubmit: function (id, fileName) {
                fileCount++;
            },
            onComplete: function (id, fileName, responseJson) {
                if (responseJson.success) {
                    if (createAvatar(responseJson.file, responseJson.imageId)) {
                        fileCount--;

                    } else {
                        fileCount--;

                    }
                } else {
                    $("span.qq-upload-file:contains(" + fileName + ")").text(responseJson.errorMessage);
                    fileCount--;
                }

                if (fileCount == 0) {
                 .....
                }

            },
            onCancel: function (id, fileName) {
                fileCount--;
                if (fileCount == 0) {
                    ....
                }
            }
        });
    });

<script>
4

2 回答 2

0

您可能需要检查是否存在对您正在使用的 JavaScript 库的重复引用(一个在父库中,一个在部分库中)。

这是一个常见问题,它不会引发任何错误,但会阻止您的 JavaScript 代码执行。

于 2013-03-07T13:24:44.380 回答
0

我认为这是一个时间线问题。在“部分视图”加载(或附加 div)之前,JavaScript 尝试绑定它并失败。所以它找不到您的部分视图文档中的元素。我遇到了类似的问题这与“ColorBox”。我已经找到了解决这个问题的方法。例如:当您调用 GET 或 POST 方法时,查询后放置一个这样的控制点。例如绑定“colorbox”:

function getMyPartial(partialname) {
    var resultDiv = document.getElementById("content");
    $.ajax({
        type: "GET",
        url: partialname,                                                                                 
        async: false,
        success: function (data) {
            resultDiv.innerHTML = "";
            resultDiv.innerHTML = data.toString();
        }
    });    
    var indd = 0; //This is Control Point
    if (partialname == "YourPartialName") {
        var yourelementinpartial= document.getElementById("example");
        while (!yourelementinpartial) {
            indd++;
        }  
        $(".group4").colorbox({ rel: 'group4' }); //binding point
    }      
}

在控制点,如果您的 PartialView 文档中的任何元素已找到,它将绑定。

于 2013-08-07T01:01:38.310 回答