点击html页面中的删除图标会滚动到页面顶部- Knockout.js

mwg9r5ms  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(175)

我是knockout.js的新手。我有一个代码,我正在调试。我面临的问题对我来说是非常新的。一个删除按钮被放置在一个div中,它的目的是删除相应的部分。我观察到一个奇怪的事情。如果页面在100%缩放,如果页面有10个部分。假设3个部分是可见的,7个部分是不可见的。在用户视图中隐藏的部分不会在点击删除按钮时被删除。2相反,在这7个部分中点击删除按钮时,焦点到达页面的顶部。
如果我把缩放比例降低到60%,页面上会显示7个部分,隐藏3个部分。现在我可以删除7个部分,没有任何问题。但是删除对用户不可见的3个部分不起作用。只要我从顶部删除几个部分,那么当最后3个部分对用户可见时,那么用户也可以删除这些部分。我不明白是什么问题。下面的代码只有一个这样的块。

  1. <div class="well border-editable field-container" data-bind="foreach: fields">
  2. <!-- ko if: !$parent.isApproved && !$parents[1].isCloned -->
  3. <div class="hover-icon field" data-bind="drag: $parent.reorderField">
  4. <div class="well well-xs border-bar field-body clearfix" data-bind="event: {mouseleave: closeTooltip}">
  5. <div class="field-operation" data-bind="visible: id != $parent.editingField().id">
  6. <span class="field-operation-item">
  7. <!-- ko if: $parents[1].status != 'distributed' -->
  8. <!-- ko if: type() != 'outcome' && type() != 'cm' && type() != 'am' && type() != 'al'-->
  9. <a href="#" class="tooltip_trigger" data-bind="sure: $parent.removeField, btnText: 'Delete', tipText: 'Are you sure?'" data-placement="top" title="Delete" tabindex="0">
  10. <i class="icon icon-trash-empty"></i>
  11. </a>
  12. <!-- /ko -->
  13. <!-- ko if: (type() == 'outcome' && !$parents[1].cmField()) ||
  14. (type() == 'cm' && !$parents[1].amField()) ||
  15. (type() == 'am' && !$parents[1].afField()) ||
  16. (type() == 'al' && !$parents[1].alfField()) --><!-- /ko -->
  17. <!-- ko if: type() == 'outcome' && $parents[1].cmField() --><!-- /ko -->
  18. <!-- ko if: type() == 'cm' && $parents[1].amField() --><!-- /ko -->
  19. <!-- ko if: type() == 'am' && $parents[1].afField() --><!-- /ko -->
  20. <!-- ko if: type() == 'al' && $parents[1].alfField() --><!-- /ko -->
  21. <!-- /ko -->
  22. <!-- ko if: $parents[1].status == 'distributed' --><!-- /ko -->
  23. </span>
  24. </div>
  25. <div data-bind="template: { name: 'field-' + type(), data: $data }">
  26. <!-- ko if: id !== $parents[1].editingField().id -->
  27. <div class="form-horizontal">
  28. <div class="form-group">
  29. <div class="col-md-12">
  30. <label class="text-primary" data-bind="text: label">Number</label>
  31. <p class="help-block" data-bind="text: description"></p>
  32. </div>
  33. <div class="col-md-3">
  34. <div class="fake-text" data-bind="text: value"></div>
  35. </div>
  36. </div>
  37. </div>
  38. <!-- /ko -->
  39. <!-- ko if: id === $parents[1].editingField().id --><!-- /ko -->
  40. </div>
  41. </div>
  42. </div>
  43. <!-- /ko -->
  44. <!-- ko if: $parent.isApproved || $parents[1].isCloned --><!-- /ko -->

下面是javascript代码:(如果您需要任何其他信息,请告诉我)

  1. function removeField () {
  2. var activeSection = _getActiveSection();
  3. activeSection.removeField(removeFieldModel);
  4. }
  5. function _getActiveSection () {
  6. var activeSectionId = self.activeSectionId();
  7. var sections = self.displaySections();
  8. return _.find(sections, function (section) {
  9. return section.id == activeSectionId;
  10. }) || sections[0] || {};
  11. }
  12. self.displaySections = ko.pureComputed(function () {
  13. return _.union(ko.unwrap(self.linkedSections), ko.unwrap(self.sections));
  14. });

我不知道你们需要什么额外的代码来帮助我调试这个。如果你需要任何其他信息,请告诉我。
这里是一个视频演示什么我试图解释。VIDEO DEMO LINK

  • 谢谢-谢谢
hfyxw5xn

hfyxw5xn1#

href设置为#的情况下,单击<a>锚标记将使页面滚动到顶部,除非您在JavaScript中调用click事件的preventDefault()方法。
解决这个问题最简单的方法可能就是从元素中删除href="#",因为它在功能上是不必要的。

相关问题