簡體   English   中英

綁定事件在 Jquery 文件上傳中觸發兩次

[英]Bind events firing twice in Jquery File Upload

我編寫了此代碼,它將讀取 CSV 文件並將項目添加到 SharePoint 列表。 它正在工作,但它兩次添加相同的項目。 它從上到下添加,然后再次添加整個項目。

它正確讀取項目並正確添加。 但我無法弄清楚為什么代碼會運行兩次。

 $(function() { $("#upload").bind("click", function() { var regex = /^([a-zA-Z0-9\\s_\\\\.\\-:])+(.csv|.txt)$/; if (regex.test($("#fileUpload").val().toLowerCase())) { if (typeof(FileReader) != "undefined") { var reader = new FileReader(); reader.onload = function(e) { var rows = e.target.result.split("\\n"); console.log(rows); for (var i = 1; i < rows.length; i++) { var cells = rows[i].split("|"); var item = { "__metadata": { "type": "SP.Data.TestCatalogListItem" }, "Title": cells[0], "CityTitle": cells[1], "FirstName": cells[3], "LastName": cells[4] } _createListItem(item); } } reader.readAsText($("#fileUpload")[0].files[0]); } else { alert("This browser does not support HTML5."); } } else { alert("Please upload a valid CSV file."); } }); }); function _createListItem(listItems, success, failure) { $.ajax({ url: "https://mysite/_api/web/Lists/getbytitle('TestCatalog')/items", type: "POST", contentType: "application/json;odata=verbose", data: JSON.stringify(listItems), headers: { "Accept": "application/json;odata=verbose", "X-RequestDigest": $("#__REQUESTDIGEST").val() }, success: function(data) { //success(data); }, error: function(data) { //failure(data); } }); }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <body> <input type="file" id="fileUpload" /> <input type="button" id="upload" value="Upload" /> </body>

非常感謝任何幫助。

經過一番研究,我找到了答案。
所以這就是我最終要做的。

代替

$("#upload").bind("click", function () {

$("#upload").unbind("click").click(function (){

現在一切正常:)

可能是您的綁定事件腳本運行了兩次,所以最終添加了兩次點擊事件。 您可以通過唯一的字符串命名事件,這樣它就不會兩次綁定事件。

$("#upload").bind("click.uniqueName", function() {
    // your code here
})

問題出在您的 ajax 調用中,在您的 ajax 調用中添加async: false 這是因為您的 for 循環將在完成 ajax 請求之前執行。 所以最好添加這個東西。 否則你可以使用 jQuery 延遲。 你的代碼工作正常。 並且您的活動僅附加一次。

function _createListItem(listItems, success, failure) {
  $.ajax({
    url: "https://mysite/_api/web/Lists/getbytitle('TestCatalog')/items",
    type: "POST",
    async:false,
    contentType: "application/json;odata=verbose",
    data: JSON.stringify(listItems),
    headers: {
      "Accept": "application/json;odata=verbose",
      "X-RequestDigest": $("#__REQUESTDIGEST").val()
    },
    success: function(data) {
      //success(data);
    },
    error: function(data) {
      //failure(data);
    }
  });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM