我已經作出了用戶控制,允許圖像被上傳,然後裁剪控制不能正常工作,但是當我有幾個這些控制中的一種形式中,僅使最後一個添加會正常工作。問題是功能storeCoords,對X沒有影響,Y,W和H隱藏字段,因此當作物「橡皮筋」被移動時,這些值不會改變。隨着最終控制的添加,隨着'橡皮筋'的移動,隱藏區域被更新,然後一切按預期工作。爲什麼當我在一個頁面上有幾個這樣的控件時,只有最後一個的JavaScript能像預期的那樣工作。Asp.Net用戶當多個被添加到一種形式
<script src="/Controls/ImageUploadAndCrop/Javascript/jquery.Jcrop.min.js" type="text/javascript"> </script>
<link href="/Controls/ImageUploadAndCrop/CSS/jquery.Jcrop.min.css" rel="stylesheet" type="text/css" />
<script type="text/javascript">
$(window).on('load', function()
{
var elem = $('#<%= CropImage.ClientID %>'),
boxWidth = elem.width(),
boxHeight = elem.height();
elem.Jcrop({
onSelect: storeCoords,
boxWidth: boxWidth,
boxHeight: boxHeight
});
$('#<%=CropButton.ClientID%>').click
(
function()
{
var cropImg = $('.jcrop-holder img');
$('#<%= ImgWidth.ClientID %>').val(cropImg.width());
$('#<%= ImgHeight.ClientID %>').val(cropImg.height());
}
);
});
function storeCoords(c)
{
$('#<%= X.ClientID %>').val(c.x);
$('#<%= Y.ClientID %>').val(c.y);
$('#<%= W.ClientID %>').val(c.w);
$('#<%= H.ClientID %>').val(c.h);
}
</script>
<div>
<asp:Panel ID="UploadPanel" runat="server">
<asp:FileUpload ID="Upload" runat="server" />
<br />
<asp:Button ID="UploadButton" runat="server" OnClick="UploadButton_Click" Text="Upload" />
<asp:Label ID="ErrorLabel" runat="server" Visible="false" />
</asp:Panel>
<asp:Panel ID="CropPanel" runat="server" Visible="false">
<asp:Image ID="CropImage" runat="server"/>
<br />
<asp:HiddenField ID="X" runat="server" />
<asp:HiddenField ID="Y" runat="server" />
<asp:HiddenField ID="W" runat="server" />
<asp:HiddenField ID="H" runat="server" />
<asp:HiddenField ID="ImgWidth" runat="server"/>
<asp:HiddenField ID="ImgHeight" runat="server"/>
<asp:Button ID="CropButton" runat="server" Text="Crop" OnClick="CropButton_Click" />
</asp:Panel>
<asp:Panel ID="CroppedPanel" runat="server" Visible="false">
<asp:Image ID="CroppedImage" runat="server" />
</asp:Panel>
</div>
您不能重複ID的一遍又一遍。如果您有多個元素的網頁上都具有相同的ID,那麼只有在'與ID' DOM的最後一個元素將有針對它採取的任何行動。您必須使用類,並將您正在使用的控制器稱爲「this」。如上所述,上面的代碼不會達到預期的結果。 – Ohgodwhy
我不確定,但我認爲'S(窗口).on'只在窗口對象被加載時執行一次,並且當您最後一個用戶控件添加到頁面時,您應該將其更改爲單獨容納每個用戶控件。 –
@Ohgodwhy你可以給一個代碼片段嗎? – Lee