无法在ModalWindow中更改IE 11中的文本框值

时间:2015-09-02 18:31:48

标签: internet-explorer wicket internet-explorer-11

我可以点击ModalWindow文本框中的文字并进行修改。当我保存然后重复该过程时,我无法单击文本框中的文本并进行更改。

这只发生在IE 11中。我可以单击X清除文本框然后设置一个值,但我不应该这样做。我不确定我的代码,IE 11或Wicket是否存在问题。我的快速入门正在使用Wicket 7.0.0,但我在Wicket 6.18.0中有类似的行为。

以下是我正在运行的IE 11的版本:

  • 版本:11.0.9600.17501
  • 更新版本:11.0.15(KB3008923)
  • 产品编号:00150-20000-00002-AA803

以下是我在Wicket快速入门中使用的步骤:

  1. 在HomePage中,单击“openWindowLink”
  2. ModalWindow打开。单击文本框中的文本并进行编辑。单击“保存”。
  3. ModalWindow关闭。再次点击“openWindowLink”。
  4. ModalWindow打开。单击文本框中的文本并尝试进行编辑。
  5. 注意您无法单击文本并获取光标进行编辑。
  6. 以下是我认为相关的快速入门部分:

    HomePage.java

        @Override
        public void onInitialize()
        {
            super.onInitialize();
    
            final ModalWindow modal = new ModalWindow("modal");
            modal.setPageCreator(new ModalWindow.PageCreator()
            {
                private static final long serialVersionUID = 1L;
    
                public Page createPage()
                {
                    return new IEModalPage();
                }
            });
            add(modal);
    
            add(new AjaxLink<Void>("openWindowLink")
            {
                private static final long serialVersionUID = 1L;
    
                public void onClick(AjaxRequestTarget target)
                {
                    modal.show(target);
                }
            });
        }
    

    HomePage.html

        <body>
            <a wicket:id="openWindowLink">Click to open the modal window</a>
            <div wicket:id="modal"></div>
        </body>
    

    IEModalPage.java

    public class IEModalPage extends WebPage
    {
        private static final long serialVersionUID = 1L;
        private String value = "clickme";
    
        @Override
        public void onInitialize()
        {
            super.onInitialize();
    
            Form<Void> form = new Form<Void>("pageForm");
            add(form);
    
            form.add(new TextField<String>("captureValue", new PropertyModel<String>(this, "value")));
    
            form.add(new AjaxSubmitLink("saveButton")
            {
                private static final long serialVersionUID = 1L;
    
                @Override
                public void onSubmit(AjaxRequestTarget target, Form<?> form)
                {
                    System.out.println(value);
                    ModalWindow.closeCurrent(target);
                }
            });
        }
    }
    

    IEModalPage.html

    <body>
        <form wicket:id="pageForm">
            Click in the text box and make sure you see a cursor: <input type="text" wicket:id="captureValue" />
            <br />
            <input type ="submit" value="Save" wicket:id="saveButton" />
        </form>
    </body>
    

1 个答案:

答案 0 :(得分:0)

这种情况的解决方案是使用解决方法来关注第一个可用的文本框。在此示例中,我仅在用户使用IE 11时添加此焦点功能。在我的基本模式页面中:

@Override
public void renderHead(IHeaderResponse response)
{
    response.render(JavaScriptHeaderItem.forScript(
        "if (Object.hasOwnProperty.call(window, 'ActiveXObject') && !window.ActiveXObject) {" +
        "   $(document).ready(function(){$('input[type=text]').first().focus();});" +
        "}",
        "IE11Focus"));
}