【问题标题】:How to fix conflict Zoomooz.js with JQueryUI autocomplete?如何解决 Zoomooz.js 与 JQueryUI 自动完成的冲突?
【发布时间】:2020-02-14 15:30:25
【问题描述】:

当我将 zoomooz.js 放入带有 jqueryui 自动完成功能的网页时,它只在第一次工作,下拉菜单不再接受鼠标点击。为了工作,我将鼠标移动到目标上,然后单击键盘上的 Enter 键。

<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

<script src="https://cdnjs.cloudflare.com/ajax/libs/zoomooz/1.1.6/jquery.zoomooz.min.js"></script>
 
<script>
  $( function() {
var availableTags = [
  "ActionScript",
  "AppleScript",
  "Asp",
  "BASIC",
  "C",
  "C++",
  "Clojure",
  "COBOL",
  "ColdFusion",
  "Erlang",
  "Fortran",
  "Groovy",
  "Haskell",
  "Java",
  "JavaScript",
  "Lisp",
  "Perl",
  "PHP",
  "Python",
  "Ruby",
  "Scala",
  "Scheme"
];
$( "#tags" ).autocomplete({
  source: availableTags
});
  } );
</script>
 
<div class="ui-widget">
  <label for="tags">Tags: </label>
  <input id="tags">
</div>

<img class="zoomTarget" data-targetsize="0.05" data-closeclick="true" src="file.png">

标签自动完成并不总是有效,只有第一次,但如果我删除 zoomooz,它就可以正常工作

【问题讨论】:

  • 欢迎来到 Stack Overflow。页面加载时,您是否在控制台中看到任何错误?尝试加载自动完成后,您是否看到任何内容?根据我在 GitHub 中看到的内容,它似乎没有冲突的命名空间,因此很难看出是否会出现问题。
  • 另外,您似乎没有使用 jQuery UI 自动完成功能:api.jqueryui.com/autocomplete minCharsautoFillmustMatch 不属于该库。
  • 对不起,我复制了 zoomerang 但它是 zoomooz.js。现在您可以运行代码并查看问题
  • 看起来click 事件在第二轮发生冲突。菜单出现,但您无法选择菜单中的项目。
  • clickTarget.on("click", function(evt) { // closeclick 在此处不可用... if(settings.closeclick && zoomTarget.hasClass("selectedZoomTarget")) { settings.root. click(); } else { zoomTarget.zoomTo(settings); } evt.stopPropagation(); });问题出在 evt.stopPropagation();我认为

标签: javascript jquery-ui autocomplete conflict zoomooz


【解决方案1】:

我无法重现您描述的问题。如果您使用 jQuery UI 自动完成,则必须使用正确的选项。这是一个工作示例。

$(function() {
  var availableTags = [
    "ActionScript",
    "AppleScript",
    "Asp",
    "BASIC",
    "C",
    "C++",
    "Clojure",
    "COBOL",
    "ColdFusion",
    "Erlang",
    "Fortran",
    "Groovy",
    "Haskell",
    "Java",
    "JavaScript",
    "Lisp",
    "Perl",
    "PHP",
    "Python",
    "Ruby",
    "Scala",
    "Scheme"
  ];

  $("#numean").autocomplete({
    source: availableTags,
    minLength: 1,
    open: function() {
      console.log("Open Triggered");
    },
    focus: function() {
      console.log("Focus Triggered");
      return true;
    },
    select: function() {
      console.log("Select Triggered");
      return true;
    }
  });

  $(".zoomTarget").zoomTo({
    duration: 1000,
    closeclick: true,
    targetsize: 0.05
  });
});
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/jquery-1.12.4.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/zoomooz/1.1.6/jquery.zoomooz.min.js"></script>
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

<input type="text" id="numean" value="">
<br />
<img class="zoomTarget" width="50%" src="https://i.imgur.com/FThOLcL.jpg">

查看更多:

更新

经过一些测试,我可以看到click 事件的冒泡被中断了。例如,在上面的示例中,在第一轮中,一切都按预期进行。在第二次搜索中,您可以 到您的选择,然后按 Enter 并触发 focusselect。但是,如果您尝试移动鼠标并单击该项目,则只会触发focus。我很确定冲突来自closeclick: true 设置。我认为这是在 Zoom 之后在更大范围内监听,然后是 select 的点击事件。

我建议设置closeclick: false,然后创建另一个关闭方法。按钮或其他更具体的事件。

您可能还注意到我在 jQuery 之前首先加载了 Zoomooz。我注意到如果它们以其他顺序加载,就会出现一些奇怪的window 冲突。

【讨论】:

  • 对不起,我复制了 zoomerang 但它是 zoomooz.js。现在您可以运行代码并查看问题
  • 我找不到解决方案,我快疯了。我想我将不得不放弃缩放
猜你喜欢
  • 2011-06-20
  • 2018-10-28
  • 2011-01-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-12
  • 2019-08-26
  • 1970-01-01
相关资源
最近更新 更多