2011-06-06 44 views
4

有谁知道如何去创造,将执行电话号码格式的掩码字段,喜欢这里(___) ___-____
http://www.smartclient.com/smartgwt/showcase/#form_maskingGWT电话号码屏蔽

+2

此格式仅在美国境内有效,无法处理国际号码。你确定,你想要吗? – nfechner 2011-06-06 20:49:43

+0

从这个演示中判断出你不想填写这样的表单。我不是用户体验专家,但我相信有更好的方法比绿屏/终端像掩蔽。 – 2011-06-06 20:52:30

+0

这些是一些非常酷的基于jQuery的示例:http://www.catswhocode.com/blog/10-jquery-tutorials-for-working-with-html-forms – 2011-06-06 21:21:31

回答

7

更好的方法是让用户输入他们想要的任何东西:“789-555-1234”或“(789)555-1234”或“7895551234”,然后当字段失去焦点时决定他们是否键入可以是电话号码。如果是这样,你可以将它重新格式化为“(789)555-1234”。关于如何用正则表达式来做这种事情,有几个相关的问题;只要确保你的正则表达式接受你改变用户输入的格式,否则编辑真的很烦人。

举一个例子,看看当你在微软的标准页面设置对话框的左边距字段中输入“.5”时会发生什么:当你将其标签改为“0.5”。

更新:这是GWT中的示例代码来说明。为了这个例子,假设有一个名为“phoneContainer”的元素来放置文本框。GWT并没有给你完整的java.util.regex包,但它足够做到这一点:

private void reformatPhone(TextBox phoneField) { 
    String text = phoneField.getText(); 
    text = text.replaceAll("\\D+", ""); 
    if (text.length() == 10) { 
     phoneField.setText("(" + text.substring(0, 3) + ") " + text.substring(3, 6) + "-" + text.substring(6, 10)); 
    } 
} 


public void onModuleLoad() { 
    final TextBox phoneField = new TextBox(); 

    RootPanel.get("phoneContainer").add(phoneField); 
    phoneField.addBlurHandler(new BlurHandler(){ 
     public void onBlur(BlurEvent event) { 
      reformatPhone(phoneField); 
     } 
    }); 
} 
1

它看起来像你想创建自己的控件,它扩展了GWT输入框,并将默认值设置为所需的掩码。然后处理onKeypress事件并根据需要更新字段(确保将光标位置设置为正确的位置)。