将表单值传递给全局变量

时间:2010-10-26 20:06:38

标签: javascript coldfusion coldfusion-8

尝试将表单值传递到全局 var 以在两个函数中使用但得到此错误document.PostReply is undefined或javascript只是崩溃,因为函数中未定义getReplyId。无论我尝试过什么,我都会得到一个或另一个错误

任何人都可以看到为什么表单值“ReplyID”没有被传递到 var
在任何函数之前,var都放在脚本的开头。

形式

<CFFORM NAME="PostReply" ID="PostReply" METHOD="POST">   
<CFINPUT TYPE="hidden" NAME="ReplyID" ID="ReplyID" VALUE="#ReplyID#">  
</CFFORM>

我尝试了什么

1 - var getReplyId = document.PostReply.ReplyID;  
2 - var getReplyId = document.PostReply.ReplyID.value;  
3 - var getReplyId = document.getElementById("ReplyID");  
4 - var getReplyId = document.PostReply.getElementById("ReplyID");    
5 - var getReplyId = document.getElementById("PostReply.ReplyID").value; `

如果我这样做var getReplyId = 1,脚本效果很好,但我需要ReplyID值。

好的,大部分内容都是

<CFOUTPUT>  
<STYLE>  
targetPostReply#ReplyID#{visibility : visible}  
targetPostReplyResponse#ReplyID#{visibility : visible}  
</STYLE>  
</CFOUTPUT>

<cfajaxproxy cfc="CFC/PostReply" jsclassname="PostReplyCFC">

<SCRIPT SRC="js/PostReply.js" TYPE="text/javascript">
    var getReplyId = document.getElementById("ReplyID").value;   
    $(document).ready(  
        function () {  
        $("form#PostReply").submit(  
        function PostNewReply(ReplyID, ReplyComment){  
            var cfc = new PostReplyCFC();   
            cfc.setCallbackHandler(getNewReply)  
            cfc.setForm('PostReply')  
            cfc.PostNewReply('ReplyComment');  

            document.getElementById("targetPostReplyResponse"+getReplyId).style.display='block';  
            document.getElementById("targetMakeReply"+getReplyId);  
            $('#targetMakeReply'+getReplyId).slideToggle("slow");  
            $(this).toggleClass("targetMakeReply"+getReplyId);  
            return false;  
        }); // .submit()  
    });  
    function getNewReply(newReply)    
    {    
        $('#replyResponse'+getReplyId).html(newReply);  
        return false;  
    }   
</SCRIPT>


<CFOUTPUT>
    <DIV ID="targetMakeReply#ReplyID#">  
        <CFFORM NAME="PostReply" ID="PostReply" METHOD="POST">  
            <CFINPUT TYPE="hidden" NAME="ReplyID" ID="ReplyID" VALUE="#ReplyID#">  
            <textarea name="ReplyComment" rows="5" cols="95"></textarea>  
            <CFINPUT type="image" name="Submit" id="submitButton" value="Post Reply" src="images/PostReply.gif" onmouseover="src='images/PostReplyO.gif'" onmouseout="src='images/PostReply.gif'">  
        </CFFORM>  
    </DIV>  
</CFOUTPUT>


<CFOUTPUT>  
    <STYLE>##targetPostReplyResponse#ReplyID#{display : none}</STYLE>  
    <DIV ID="targetPostReplyResponse#ReplyID#">  
        <TABLE ALIGN="center" VALIGN="top" WIDTH="750" BGCOLOR="FFFFFF" CELLPADDING="0" CELLSPACING="0">  
            <TR>  
                <TD COLSPAN="2" CLASS="text12B"><IMG SRC="images/blank.gif" WIDTH="1" HEIGHT="5" ALT="" BORDER="0"><BR><SPAN ID="replyResponse#ReplyID#"></SPAN></TD>  
            </TR>  
        </TABLE>  
    </DIV>  
</CFOUTPUT>

3 个答案:

答案 0 :(得分:0)

要使变量成为全局变量,只需忽略var

getReplyId = document.getElementById("ReplyID").value;

请注意,全局变量通常是次优实践。如果可能,考虑让一个函数调用另一个函数并将该变量作为参数传递。

答案 1 :(得分:0)

嗯,我不知道为什么会这样,但我把getReplyId = document.getElementById("ReplyID").value;放在PostNewReply函数中,它仍然作为一个全局变量。从我知道的一切都不应该起作用,但确实如此。

答案 2 :(得分:0)

在新函数调用“SubmitReply”中包含所有JS,并使用INPUT“提交”按钮中的onclick“SubmitReply”将ID传递给它。然后将ID(ReplyID)传递给var getReplyId = (Id)。这使得getReplyId能够被上面显示的所有JS使用。现在,JS,cfajaxproxy和CFC可以使用ID使表单动态化,并具有自己的ID。