jquery内联编辑问题:即使在保存后仍然单击仍然触发

时间:2011-08-02 10:34:17

标签: jquery ajax events inline editing

我在jquery中遇到内联编辑问题,希望你能帮到我。 我有一个动态生成的表,包含2个单元格中的数据。一个单元格包含活动的名称,其他单元格为空,但背景颜色显示分配活动的颜色。

现在我想进行内联编辑。对于名称部分,它工作正常。当您单击名称时,会出现一个输入框,其中包含按钮保存,取消,删除等功能。

对于颜色单元格,想法是在用户单击单元格时显示颜色选择器,并且可以使用颜色选择器更改颜色,然后保存,删除或取消。取消和删除工作正常但在选择新颜色后保存时,再次触发click事件。因此,当我完成保存时,它会保存,但我会再次显示编辑字段。我必须点击取消才能使一切正确。这是我的代码,以便更清晰。

$(document).ready(function () {
.......
......

 //Editable class: Edit an entry when mouse hover
      $('.editablecolor').live({
          click: function (e) {

              //start inline editing
              alert('editing color');
              var $editable = $(this);
              if ($editable.hasClass('active-inline')) {
                  return;
              }

              //get the current backgroundColor
              initialValue = $(this).css('background-color');
              editType = 'color';
              alert(initialValue);


              $editable
                .addClass('active-inline')
                .empty();

              //define the edit element
              var editElement = '<input type="text" class="kolorPicker" />';
              $(editElement)
                .val(initialValue)
                .appendTo($editable)
                .focus();

              addEditButtons($editable);

          }
      });


 function addEditButtons($editable) {
          $editable.append('<div class="editFieldButtons"><input type="button"   value="save" class="editFieldSave"/>' +
                ', <input type="button" value="delete" class="editFieldDelete"/>or ' +
                '<input type="button" value="cancel" class="editFieldCancel"/></div>');

          $('.editFieldButtons > .editFieldSave').click(editSave);
          $('.editFieldButtons > .editFieldDelete').click(editDelete);
          $('.editFieldButtons > .editFieldCancel').click(editCancel);
          $('input.editField').keydown(function (e) {
              if (e.keyCode == 13) {
                  // Enter
                  editSave();
              } else if (e.keyCode == 27) {
                  // Escape
                  editCancel();
              }
          });

      }


//Saving edit value
       function editSave() {
          alert('editSave editType: ' + editType);

          if (editType == 'name') {

//               ...works correctly
          }
          else if (editType == 'color') {

              alert('editSave start to save ');

              $('.editFieldButtons, .kolorPicker').attr('disabled', 'disabled');
              var $editField = $('.kolorPicker');
              var $editable = $editField.parents('.editablecolor');
              var contents = $editField.val();
              var parentdiv = $editable.parents('div').filter(':first').attr('id');
              var editID = $editable.attr('id').toString().split('_')[1];
              $editField.replaceWith('<em class="ajax">Saving...</em>');

              alert('editSave about to save ');
              // post the new value to the server along with its ID
              $.post(
                    processpage,
                    { id: editID, value: contents, tc: parentdiv, cmd: cmdUpdate, fieldToUpdate: editType },
                    function (data) {
                        $editable
                            .removeClass('active-inline')
                            .empty()
                            .css('background-color', contents);
                        alert('editSave finish to save ');
                    });
          }
      } //end function

感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

如果您在event.stopPropagation()功能中调用editSave以阻止点击传播到父级,该怎么办?当然,您必须先将事件添加为函数参数。

http://api.jquery.com/event.stopPropagation/