IE在弹出层中使用空内容的Textarea时会报错的解决方法

最近在IE里使用Textarea时发现一直会报错,而且这个错误是个能导致整个浏览器奔溃的错误,查了好久发现,如果这个Textarea被放在一个blackui制作的弹出层中时,当弹出层弹出的瞬间,如果光标在Textarea上并且Textarea中内容为空时,你快速的按键盘(随便什么只要能输入的字符),立刻整个浏览器就奔溃了(这个动作一定要快,在Textarea中的光标闪第一下之前快速的按键盘,如果它闪了一下就出不来了)。在FF下无法重现,只能在IE下(我用的是IE8)出现。苦思冥想很长时间都没有发现问题,关键是对于这个输入框的操作也只有在脚本里,就算脚本真的有问题也不可能导致整个浏览器的崩溃? JS脚本没有那么大威力瓦?

 

郁闷了几个小时后,突然一个地方让我注意到,我发现会出问题的输入框在弹出之前都会执行一个清空过程($("#textarea_Note").text("") 这样清空内容),难道问题出在这里?不管了先试试,我将$("#textarea_Note").text("") 的这句改成了jquery里的$("#textarea_Note").empty(),也就是直接清空textarea里的内容(innerHTML=""),再时问题解决了!这里补充一下如果还是不行,看看你的textarea的innerText里是不是在拐弯抹角的地方被赋过undefined值如果这样也会发生这个情况。

 

可为什么FF下就没有问题呢?分析下来, FF里取textarea值的方法是取它的value值,而IE里取的是innerText,当你将innerText清空时可能并没有完全的清空textarea当中的对象,当你在选中Textarea的瞬间IE还没有完成初始化Textarea下子对象(或者说清空它下面的字对象因为文本内容也是一个对象),当你在IE初始化textarea的innerHTML之前你就快速的输入内容你此时可能就输入到了某个并不支持输入的对象中这个时候IE浏览器也就崩溃了(写只读区错误)。看来不是所有浏览器都支持innerText到也有道理,如果某个对象中即包含HTML对象又包含某些文字,当你给innerText清空时其实并没有删除所有这个对象下的子对象,而且这些对象可能都是你看不到的。

可以使用以下代码实现在Java Swing出窗口并在TextArea显示文件内容的功能: ```java import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import javax.swing.JButton; import javax.swing.JFileChooser; import javax.swing.JFrame; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTextArea; public class FileViewer extends JFrame implements ActionListener { private JButton openButton; private JTextArea textArea; public FileViewer() { super("File Viewer"); // Create components openButton = new JButton("Open"); openButton.addActionListener(this); textArea = new JTextArea(); JScrollPane scrollPane = new JScrollPane(textArea); // Add components to content pane Container contentPane = getContentPane(); contentPane.add(openButton, BorderLayout.NORTH); contentPane.add(scrollPane, BorderLayout.CENTER); // Set window properties setSize(400, 300); setLocationRelativeTo(null); setDefaultCloseOperation(EXIT_ON_CLOSE); } public static void main(String[] args) { // Create and show window FileViewer fileViewer = new FileViewer(); fileViewer.setVisible(true); } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == openButton) { // Create file chooser dialog JFileChooser fileChooser = new JFileChooser(); int result = fileChooser.showOpenDialog(this); if (result == JFileChooser.APPROVE_OPTION) { // Get selected file File file = fileChooser.getSelectedFile(); try { // Read file contents BufferedReader reader = new BufferedReader(new FileReader(file)); String line; StringBuilder sb = new StringBuilder(); while ((line = reader.readLine()) != null) { sb.append(line); sb.append(System.lineSeparator()); } reader.close(); // Set text area contents textArea.setText(sb.toString()); } catch (Exception ex) { ex.printStackTrace(); } } } } } ``` 这段代码会创建一个名为 "File Viewer" 的窗口,其包含一个 "Open" 按钮和一个文本区域。当用户点击 "Open" 按钮,会出一个文件选择器对话框,用户可以选择要读取的文件。然后,程序会读取文件内容并将其显示在文本区域
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值