This is not a bad idea indeed. That would eliminate the backstabbing problem, I think. Though I'd most probably still like to be polite and not to frag typos. But that's my fault then and I can deal with it
A solution like this would make chatting more convenient and easier in general. You'd of course have to be able to disable such function via cvar client-side.
Edit: Oh, and left-clicking should not immediately shoot, of course, but restore movement and fire controls.
But what if you use team chat and fire and want to use global chat after that? What about preconfigured chat binds used while half-typed message is still in cache? I think in those cases the cached content should be either discarded or stored until the next time the respective chat command is placed. Like this:
Player starts to type into team-chat, then fires before pressing return, does some fighting, then says globally "woha, how did you do that?" via global chat, informs the team that he/she is going to defend via bind, and then starts to team-chat again, where his half-typed message is being displayed to him again.
That way we would need most probably a cache for team chat as well as for global chat, since you could be interrupted while saying "woha, how did you do that?" as well. I could imagine that hitting "esc" while chatting would be a good way to instantly delete the whole message, which might be also quite useful then if the half-typed contents is already outdated.
Another edit (I get quite enthusiastic about this idea...): The most simple solution would most probably be to implement extra chat commands (global, team and maybe even "tell") that provide this functionality, in order not to interfere with the existing chat commands. That way we could leave everything as it is and add the functionality without problems. Every player may choose to use the extended command or the standard command for his chat binds.