GWT 捕获 Textbox onload 事件

问题描述 投票:0回答:1

我有一个表单,用户可以在多个文本框中输入信息。

文本框是这样创建的 -

GroupSection courseNumber = new GroupSection(getH4Title(""));
courseNumber.addStyleName(LUUIConstants.STYLE_SECTION);
courseNumber.addStyleName(LUUIConstants.STYLE_SECTION_DIVIDER);

// KSTextBox extends TextBox incidentally 
// I've added some custom functionality in my version of this class
KSTextBox  subjectCodeTextBox  = new KSTextBox();
KSTextBox  courseNumberTextBox = new KSTextBox();
.
.
.
addField(courseNumber, 
         COURSE + "/" + SUBJECT_AREA, 
         generateMessageInfo(LUUIConstants.SUBJECT_CODE_LABEL_KEY),
         subjectCodeTextBox);
addField(courseNumber, 
         COURSE + "/" + COURSE_NUMBER_SUFFIX,
         generateMessageInfo(LUUIConstants.COURSE_NUMBER_LABEL_KEY),
         courseNumberTextBox);
.
.
.
courseNumber.addSection(generateCrossListed_Ver_Joint_Section());
return courseNumber;

渲染后的效果如下: 2 Text boxes

这些文本框所在的同一页面在我的应用程序中重复用于不同的场景;然而,对于一种特定的情况,我需要将它们设置为只读。

我识别这种情况的方法是检查页面标题。如果页面上有关键字“修改” - 我不希望用户能够更改这些文本框中自动填充的值。

我几乎通过实施这个实现了这一点 -

subjectCodeTextBox.addBlurHandler(new BlurHandler() {

  @Override
  public void onBlur(BlurEvent blurEvent) {
    NodeList<Element> elements = Document.get().getElementsByTagName("div");
    for (int i = 0; i < elements.getLength(); i++) {
      Element elem = elements.getItem(i);
      String innerHTML = elem.getInnerHTML();
      if (innerHTML.contains("Modify")) {
        subjectCodeTextBox.setReadOnly(true);
        courseNumberTextBox.setReadOnly(true);
      }
      break;
    }
  }
});

courseNumberTextBox.addBlurHandler(new BlurHandler() {

  @Override
  public void onBlur(BlurEvent blurEvent) {
    NodeList<Element> elements = Document.get().getElementsByTagName("div");
    for (int i = 0; i < elements.getLength(); i++) {
      Element elem = elements.getItem(i);
      String innerHTML = elem.getInnerHTML();
      if (innerHTML.contains("Modify")) {
        subjectCodeTextBox.setReadOnly(true);
        courseNumberTextBox.setReadOnly(true);
      }
      break;
    }
  }
});

上面的代码可以工作,但只有在用户单击然后退出这两个文本框之一后才会触发。但到那时,他们可能已经更改了值并且不希望这样——我希望在页面首次呈现时禁用这些框。

当页面首次呈现给用户时,如何将这些文本框设置为只读?

我认为它与 ONLOAD 事件有关,但如何正确设置它?

events gwt event-handling onload
1个回答
0
投票

你可以尝试编写如下代码:

    AttachEvent.Handler attachHandler = new AttachEvent.Handler() {
    
            @Override
            public void onAttachOrDetach(AttachEvent event) {
                if (makeUnreadable) {
                    box.setReadOnly(true);
                    box.setReadOnly(true);
                }
            }
    };
    courseNumberTextBox.addAttachHandler(attachHandler);
    subjectCodeTextBox.addAttachHandler(attachHandler);

你可能会看到,我正在使用“makeUnreaded”标志,你可以用自己的方式计算它,尽管它必须在“div”和“Modify”文本附加到DOM之后计算。

除此之外,恕我直言,您决定是否使框可读的方式几乎没有解决方法。想象一下,将来将不再有“修改”文本,而是“编辑”——那么您的代码将无法工作。当您向应用程序添加另一种语言支持时,也会发生同样的情况。也许您可以想出另一种方法来告诉应用程序这些字段应该不可读?

© www.soinside.com 2019 - 2024. All rights reserved.