Wicket - IE8 - 当通过ajax动态添加标记时,Javascript事件侦听器未执行

时间:2013-11-21 19:11:26

标签: javascript ajax internet-explorer-8 wicket wicket-6

我花了几个小时,也许几天都陷入了一个非常奇怪的问题:(

我正在创建一个基于Wicket解决方案的应用程序。它在IE9,IE10,Chrome和FF中完美运行。奇怪的是,我已经在IE8中对它进行了测试,它在99%的情况下工作(IE实例在不同的计算机上+完全相同的IE8版本)。但现在问题。

问题: 我正在通过AjaxLink按钮创建动态内容。单击按钮后,WebMarkupContainer模型被更改,WebMarkupContainer被刷新(基于Ajax,因此页面没有重新加载完成,但只有容器是)。

容器中的每个项目都添加了AjaxFormComponentUpdatingBehavior。在onComponentTag方法中,我添加tag.put(“onchange”,“some jsFunctionCalling ....”);.问题是,单击该项后,不会调用任何事件。我试过在.add(new AttributeModifier .....)上添加onchange监听器,但结果仍然相同。正如我所说,我在另一台PC上的同一版本的IE中尝试了相同的代码,它运行良好。 有趣的是,在刷新页面之后,一切都工作得很完美,直到添加到WebMarkupContainer的新项目。之后,在页面再次刷新之前,没有项目监听器工作。

我得到的最新想法之一是,问题不在代码中,而是在IE的设置中(可能是安全性)。有什么想法吗?什么设置可以设置不同并导致这些问题? Wicket网站上有任何设置,可以解决这个问题吗?是否有一些设置可以阻止这些侦听器注册到DOM,如果它们是通过ajax动态添加的?

3 个答案:

答案 0 :(得分:1)

我没试过,但恕我直言,你可以尝试三种选择:

  1. 不要自己添加“onchange”,而是添加OnChangeAjaxBehavior并在wicket中完成所有工作。下行是每次活动的服务器往返。
  2. 添加数据属性(AttributeModifier.append("data-param1", "foobar"))以将参数推送到html,并在AjaxLink上的click事件之后调用ajaxRequestTarget.appendJavaScript("attachOnChangeHandler()"); attachOnChangeHandler()应该是你的js函数,为每个需要它的项添加onchange处理程序。通过数据属性,您可以访问参数。
  3. Since Wicket 6:为了避免与Wicket混合使用多个js,您可以订阅其中一个全局AJAX事件。 你的案例中的解决方案几乎与2中的相同。只需在js中为“/ ajax / call / success”添加一个监听器 (通过检查id来查看调用是否与您的组件相关)并在那里添加onchange处理程序。 这是恕我直言,没有将自定义js与Wicket混合的最佳解决方案。
  4. @peterchon提供的解决方案(将DOM中的事件处理程序附加到将被wicket替换的元素)将适用于所有其他情况,但是您的“onchange”仅适用于输入,textarea和选择元素。

    BTW页面在刷新后“正常工作”,因为整个页面都会呈现,浏览器可以正确地附加处理程序。

答案 1 :(得分:0)

您可以尝试以下方法:

/* this will catpure the target that triggered the event */
function getEventTarget( e ) {
  e = e || window.event;
  return e.target || e.srcElement;
}

function doSomething( e ) {
  var that = getEventTarget( e );
  if( that.tagName.toLowerCase() === 'a' ) { // specify the target, in this cas <a>
    // Do something
  }
}

parentElement.onclick = doSomething;

这个脚本基本上会捕获任何事件,然后将target的变量传递给将执行某些操作的函数。

希望这对你有用。

答案 2 :(得分:0)

您尝试使用非wi​​cket JavaScript / Ajax方式实现某些功能。这很好,但也使它非常混乱。

请查看关于将参数从JavaScript传递到wicket的精美文章,反之亦然。我认为它会满足您的需求。

http://wickedsource.org/2013/01/07/rolling-your-own-ajax-behavior-with-wicket/

相关问题