2014-11-21 57 views
0

在以下頁面中,開始一個元素,使用戶可以裁剪和保存圖像。它僅適用於循環中的第一項,但對於後面的所有sql行,單擊圖像不會打開模式對話框。當使用循環時,jQuery功能在除第一個項目之外的所有項目中丟失

我沒有任何重疊標籤,我已經仔細檢查過。我移動了js腳本標籤,也沒有任何改變。這是否有一個共同的原因?哪裏會是第一個解決問題的地方?在PHP中使用不同類型的循環會更好嗎?

 <?php 
    ob_start(); 
    session_start(); 
    require_once ('verify.php'); 
    ?> 
    <head> 
    <title>Edit Listings</title> 
    <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css" rel="stylesheet"> 
    <link href="../css/cropper.min.css" rel="stylesheet"> 
    <link href="../css/crop-avatar.css" rel="stylesheet"> 
    </head> 
    <body> 
    <div id="container"> 
     <div id="head"> 
     <ul id="menu"> 
     </ul> 
     </div> 
     <div id="area"></div> 
     <div id="main_listings"> 
     <h1 align="left">Edit listings page</h1> 
     <?php 
    include ("../dbcon2.php"); 
    $conn = new mysqli($servername, $username, $password, $dbname); 
    $sql="SELECT * FROM listings ORDER BY date_added DESC"; 
    $result = $conn->query($sql); 
     ?> 
     <?php while ($data=mysqli_fetch_assoc($result)): 
       $id = $data['id']; 
       $id = $data['title']; 
       $listing_img = $data['listing_img']; 
     ?> 
     <div id="edit_listing"> 
      <div id="edit_left"> 
      <div class="container" id="crop-avatar"> 
       <div class="avatar-view" title="Change the avatar"> <img src="<?php echo $listing_img; ?>" alt="<?php echo $title; ?>"> </div> 
       <div class="modal fade" id="avatar-modal" tabindex="-1" role="dialog" aria-labelledby="avatar-modal-label" aria-hidden="true"> 
       <div class="modal-dialog modal-lg"> 
        <div class="modal-content"> 
        <form class="avatar-form" method="post" action="edit-avatar.php" enctype="multipart/form-data"> 
         <div class="modal-header"> 
         <button type="button" class="close" data-dismiss="modal">&times;</button> 
         <h4 class="modal-title" id="avatar-modal-label">Listing Main Image</h4> 
         </div> 
         <div class="modal-body"> 
         <div class="avatar-body"> 
          <div class="avatar-upload"> 
          <input class="avatar-src" name="avatar_src" type="hidden"> 
          <input class="avatar-data" name="avatar_data" type="hidden"> 
          <input name="avatar_id" type="hidden" value="<?php echo $id; ?>"> 
          <label for="avatarInput">Local upload</label> 
          <input class="avatar-input" id="avatarInput" name="avatar_file" type="file"> 
          </div> 
          <div class="row"> 
          <div class="col-md-9"> 
           <div class="avatar-wrapper"></div> 
          </div> 
          <div class="col-md-3"> 
           <div class="avatar-preview preview-lg"></div> 
          </div> 
          </div> 
         </div> 
         </div> 
         <div class="modal-footer"> 
         <button class="btn btn-default" type="button" data-dismiss="modal">Close</button> 
         <button class="btn btn-primary avatar-save" type="submit">Save</button> 
         </div> 
        </form> 
        </div> 
       </div> 
       </div> 
       <div class="loading" tabindex="-1" role="img" aria-label="Loading"></div> 
      </div> 
      </div> 
      <div id="edit_right"> 
      <form name="edit_date" action="edit_list.php" method="post" id="edit_list_data"> 
       <input name="title" type="text" id="title" tabindex="1" value="<?php echo $title; ?>" size="60" maxlength="57"/> 
       <input type="hidden" name="id" value="<?php echo $id; ?>" /> 
       <input type="submit" formaction="edit_list.php" value="Submit" /> 
      </form> 
      </div> 
     </div> 
     <?php endwhile;$conn->close();?> 
     <div class="spacer"></div> 
     </div> 
    </div> 
    <script src="//code.jquery.com/jquery-1.11.1.min.js"></script> 
    <script src="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/js/bootstrap.min.js"></script> 
    <script src="../js/cropper.min.js"></script> 
    <script src="../js/crop-avatar.js"></script> 
    </body> 
    </html><?php // Flush the buffered output. 
     ob_end_flush(); 
    ?> 

JS JS

// Events 
      EVENT_MOUSE_DOWN = "mousedown touchstart", 
      EVENT_MOUSE_MOVE = "mousemove touchmove", 
      EVENT_MOUSE_UP = "mouseup mouseleave touchend touchleave touchcancel", 
      EVENT_WHEEL = "wheel mousewheel DOMMouseScroll", 
      EVENT_RESIZE = "resize" + CROPPER_NAMESPACE, // Bind to window with namespace 
      EVENT_DBLCLICK = "dblclick", 
      EVENT_BUILD = "build" + CROPPER_NAMESPACE, 
      EVENT_BUILT = "built" + CROPPER_NAMESPACE, 
      EVENT_DRAG_START = "dragstart" + CROPPER_NAMESPACE, 
      EVENT_DRAG_MOVE = "dragmove" + CROPPER_NAMESPACE, 
      EVENT_DRAG_END = "dragend" + CROPPER_NAMESPACE, 

     build: function() { 
      var $this = this.$element, 
       defaults = this.defaults, 
       buildEvent, 
       $cropper; 

      if (!this.ready) { 
      return; 
      } 

      if (this.built) { 
      this.unbuild(); 
      } 

      $this.one(EVENT_BUILD, defaults.build); // Only trigger once 
      buildEvent = $.Event(EVENT_BUILD); 
      $this.trigger(buildEvent); 

      if (buildEvent.isDefaultPrevented()) { 
      return; 
      } 

      // Create cropper elements 
      this.$cropper = ($cropper = $(Cropper.TEMPLATE)); 

      // Hide the original image 
      $this.addClass(CLASS_HIDDEN); 

      // Show and prepend the clone iamge to the cropper 
      this.$clone.removeClass(CLASS_INVISIBLE).prependTo($cropper); 

      // Save original image for rotation 
      if (!this.rotated) { 
      this.$original = this.$clone.clone(); 

      // Append the image to document to avoid "NS_ERROR_NOT_AVAILABLE" error on Firefox when call the "drawImage" method. 
      this.$original.addClass(CLASS_INVISIBLE).prependTo(this.$cropper); 

      this.originalImage = $.extend({}, this.image); 
      } 

      this.$container = $this.parent(); 
      this.$container.append($cropper); 

      this.$canvas = $cropper.find(".cropper-canvas"); 
      this.$dragger = $cropper.find(".cropper-dragger"); 
      this.$viewer = $cropper.find(".cropper-viewer"); 

      defaults.autoCrop ? (this.cropped = TRUE) : this.$dragger.addClass(CLASS_HIDDEN); 
      defaults.dragCrop && this.setDragMode("crop"); 
      defaults.modal && this.$canvas.addClass(CLASS_MODAL); 
      !defaults.dashed && this.$dragger.find(".cropper-dashed").addClass(CLASS_HIDDEN); 
      !defaults.movable && this.$dragger.find(".cropper-face").data(STRING_DIRECTIVE, "move"); 
      !defaults.resizable && this.$dragger.find(".cropper-line, .cropper-point").addClass(CLASS_HIDDEN); 

      this.$scope = defaults.multiple ? this.$cropper : $document; 

      this.addListeners(); 
      this.initPreview(); 

      this.built = TRUE; 
      this.update(); 

      $this.one(EVENT_BUILT, defaults.built); // Only trigger once 
      $this.trigger(EVENT_BUILT); 
     }, 
+1

所以,這是HTML,但你真正問到的jQuery代碼在哪裏? – jfriend00 2014-11-21 17:29:36

+0

@ jfriend00因此,它使用v1.11.1 //code.jquery.com/jquery-1.11.1.min.js,它在html頁面的末尾由調用。我首先想到的是它與我正在使用的循環類型不兼容,而不是js本身,因爲在循環的第一個數據項中,所有東西都起作用。 – rhill45 2014-11-21 17:33:53

+1

我不是在問jQuery本身。我在問你自己寫的自定義Javascript。你指的這個循環在哪裏?我們需要您實際詢問的那個Javascript/jQuery循環的代碼。 – jfriend00 2014-11-21 17:35:20

回答

1

你的問題的根源在於兩方面(和可能存在的其他問題背後)。

第一個,您的HTML中有大量重複的id值。

下面是一些複本的:edit_listingcontaineredit_leftcrop-avataravatar-modal,等等......只能用

一個給定的ID 一旦整個HTML文件內。所有這些id值需要更改爲類名稱(可以多次使用),然後引用它們的任何代碼或CSS需要更改爲引用類名稱,而不是ID值。

此進場在你的代碼,當你做:

new CropAvatar($("#crop-avatar")); 

因爲這是一個ID引用,它只會在與該ID您的頁面中選擇的第一要素。因此,只有第一個列表處於活動狀態。如果更改HTML是:

<div class="container crop-avatar"> 

然後,你可以用一個類選擇.crop-avatar全部選中。

第二個,你的CropAvatar()構造函數只被調用過一次,但它的寫法好像它只會在單個化身上運行。因此,無論您需要爲每個列表單獨呼叫CropAvatar(),還是需要重寫CropAvatar(),並且它的事件處理程序可以爲所有列表工作,而不僅僅是一個。

你也許可以使現有CropAvatar()構造工作,如果你解決所有重複的ID值,然後更改此:

var example = new CropAvatar($("#crop-avatar")); 

這樣:

$(".crop-avatar").each(function() { 
    new CropAvatar($(this)); 
}); 

這將調用CropAvatar()構造函數每個列表。


這些是我看到的前兩個主要問題。我不能保證沒有其他事情要解決,但只有在前兩個問題得到解決之後才能看到這些問題。

相關問題