2013-03-27 161 views
1

我创建了一个函数来启用/禁用提交按钮,并且我希望它在用户在文本字段中键入内容时运行。使用onkeyup调用javascript函数

这里是我的代码:

<form name="sidebarPostMessageForm" action="../app/NewMessageAsynch.action"> 
    <input type="hidden" name="conversationId" value="${conversationId}"/> 
    <lalahtml:textarea id="messageText" name="messageText" onkeyup="enableDisablePostButton();" ></lalahtml:textarea> 
    <input type="button" name="postMessage" id="postMessage" onclick="if(this.form.messageText.value.trim().length>0){sidebar_postMessage();this.disabled='disabled'}" value="<ezmi18n:message key="doSendMessage.Label" />"/> 
</form> 
<script type="text/javascript"> 
function enableDisablePostButton(){ 
    if (document.getElementById("messageText").value.trim() == "") { 
     document.getElementById("postMessage").disabled="disabled"; 
    } else { 
     document.getElementById("postMessage").disabled=""; 
    } 
} 
</script> 

当我测试了一下,我得到了以下JavaScript错误:

错误:

的ReferenceError:enableDisablePostButton没有定义 enableDisablePostButton ();

debugging with firebug

这就像如果函数enableDisablePostButton()是不存在的......没有人知道为什么,我该怎么办?

+0

似乎工作正常,当我尝试它..是否有更多的脚本? – 2013-03-27 14:47:41

+0

不..这是所有..:S – periback2 2013-03-27 14:48:35

+0

@ periback2尝试设置一个jsfiddle,我试过了,它为我工作。 – Uby 2013-03-27 14:49:38

回答

1

我发现问题了,伙计们!事实上,JavaScript块没有被加载,因为它被异步提取(ajax)。我现在发现了这一点,我直接在onkeyup属性中设置javascript代码:

onkeyup="this.form.messageText.value.trim() == ''? this.form.postMessage.disabled='disabled': this.form.postMessage.disabled='';" 

感谢您的帮助!

1

我认为将脚本标签放置在表单标签上方应该有效。 enableDisablePostButton函数是在窗体标签之后定义的,因此它无法找到该函数。

<script type="text/javascript"> 
function enableDisablePostButton(){ 
    if (document.getElementById("messageText").value.trim() == "") { 
     document.getElementById("postMessage").disabled="disabled"; 
    } else { 
     document.getElementById("postMessage").disabled=""; 
    } 
} 
</script> 
<form name="sidebarPostMessageForm" action="../app/NewMessageAsynch.action"> 
    <input type="hidden" name="conversationId" value="${conversationId}"/> 
    <lalahtml:textarea id="messageText" name="messageText"  onkeyup="enableDisablePostButton();" ></lalahtml:textarea> 
    <input type="button" name="postMessage" id="postMessage" onclick="if(this.form.messageText.value.trim().length>0){sidebar_postMessage();this.disabled='disabled'}" value="<ezmi18n:message key="doSendMessage.Label" />"/> 
</form> 
+0

约定,所有应该在所有html代码后添加javascript代码/文件...这不应该解决问题:/ – periback2 2013-03-27 15:55:18

+0

这对我有效。 – TREMOR 2017-11-23 11:28:27