2

由于兼容性,我已经使用 iframe 实现了 AJAX 上传,但是我现在尝试将 AJAX 上传返回的jcrop结果与之后加载的结果绑定。

PHP 输出格式如下:

<img src="upload/'.$new_name.'" id="cropbox" />

            <!-- This is the form that our event handler fills -->
            <form action="crop.php" method="post" onsubmit="return checkCoords();">
                <input type="hidden" id="x" name="x" />
                <input type="hidden" id="y" name="y" />
                <input type="hidden" id="w" name="w" />
                <input type="hidden" id="h" name="h" />
                <input type="submit" value="Crop Image" class="btn btn-large btn-inverse" />
            </form>

我的问题是jcrop不与图像绑定。

这是因为jQuery绑定它应该在 AJAX 上传发布结果后运行吗?还是应该自动与图像绑定?

enter code here的JSjcrop如下:

<script type="text/javascript">
$(function(){

    $('#cropbox').Jcrop({
      aspectRatio: 1,
      onSelect: updateCoords
    });

  });

  function updateCoords(c)
  {
    $('#x').val(c.x);
    $('#y').val(c.y);
    $('#w').val(c.w);
    $('#h').val(c.h);
  };

  function checkCoords()
  {
    if (parseInt($('#w').val())) return true;
    alert('Please select a crop region then press submit.');
    return false;
  };
</script>

谁能告诉我为什么js不与图像绑定?或者提供什么建议?

4

1 回答 1

0

问题出在 js 脚本上,因为图像已上传,js 函数试图绑定到不存在的 id,这就是 js 脚本无法运行的原因。上面文件中的 js 必须在加载图像的末尾放入 js 函数中,因此在加载图像后,jquery 将 id 绑定到 jcrop。

例如旧脚本。

<script type="text/javascript">

    $(document).ready(function () {

        $("#formsubmit").click(function (event) {
            event.preventDefault();
            var iframe = $('<iframe name="postiframe" id="postiframe" style="display: none" />');

            $("body").append(iframe);

            var form = $('#theuploadform');
            form.attr("action", "uploader.php");
            form.attr("method", "post");
            form.attr("enctype", "multipart/form-data");
            form.attr("encoding", "multipart/form-data");
            form.attr("target", "postiframe");
            form.attr("file", $('#userfile').val());
            form.submit();

            $("#postiframe").load(function () {
                iframeContents = $("#postiframe")[0].contentWindow.document.body.innerHTML;
                $("#textarea").html(iframeContents);
                $("#postiframe").remove();
                $(document).find('#postiframe').remove();
            });


        });

    });
</script> 
<script type="text/javascript">
$(function(){

    $('#cropbox').Jcrop({
      aspectRatio: 1,
      onSelect: updateCoords
    });

  });

  function updateCoords(c)
  {
    $('#x').val(c.x);
    $('#y').val(c.y);
    $('#w').val(c.w);
    $('#h').val(c.h);
  };

  function checkCoords()
  {
    if (parseInt($('#w').val())) return true;
    alert('Please select a crop region then press submit.');
    return false;
  };
</script>

变成:

<script type="text/javascript">

    $(document).ready(function () {

        $("#formsubmit").click(function (event) {
            event.preventDefault();
            var iframe = $('<iframe name="postiframe" id="postiframe" style="display: none" />');

            $("body").append(iframe);

            var form = $('#theuploadform');
            form.attr("action", "uploader.php");
            form.attr("method", "post");
            form.attr("enctype", "multipart/form-data");
            form.attr("encoding", "multipart/form-data");
            form.attr("target", "postiframe");
            form.attr("file", $('#userfile').val());
            form.submit();

            $("#postiframe").load(function () {
                iframeContents = $("#postiframe")[0].contentWindow.document.body.innerHTML;
                $("#textarea").html(iframeContents);
                $("#postiframe").remove();
                $(document).find('#postiframe').remove();

                //attempt at joining
                $(function(){

                    $('#cropbox').Jcrop({
                      aspectRatio: 1,
                      onSelect: updateCoords
                    });

                  });

                  function updateCoords(c)
                  {
                    $('#x').val(c.x);
                    $('#y').val(c.y);
                    $('#w').val(c.w);
                    $('#h').val(c.h);
                  };

                  function checkCoords()
                  {
                    if (parseInt($('#w').val())) return true;
                    alert('Please select a crop region then press submit.');
                    return false;
                  };
            });


        });

    });
</script>
于 2013-08-23T13:51:10.167 回答