Dojo双提交

时间:2011-09-02 19:34:22

标签: dojo

呀!我自己也不明白!

以下是动态加载到名为“ContentCompanyType”的ContentPane中的表单。当单击提交按钮以使用ajax提交表单时,firefox的firebug显示正在提交两次的表单。成功后第二次表单无法验证。

我将第一个重新调整页面(成功页面)设置为简单文本,因此我知道双重提交来自此页面/代码。

<script language="JavaScript">

    var human = 0;

    dojo.parser.parse(dojo.byId('CompanyTypeForm'));

    dojo.addOnLoad(function(){

        // Select the Company Type if displayed

        dijit.byId('CompanyTypeSelection').set('value',String(1));

        // AJAX get Company Type

        var dijitCT = dijit.byId("CompanyTypeSelection");

        dojo.connect(dijitCT, "onClick", function() {
            human = 1;
        });

        dojo.connect(dijitCT, "onChange", function() {
            if(human) {
                var ctNum = dijitCT.get('value');
                dijit.byId('ContentCompanyType').set("href","companyType/"+ctNum+"/");
            }
        });

        // AJAX Form submission

        var formName = dojo.byId("companyTypeForm");

        dojo.connect(formName, "onsubmit", function(event) {

            event.preventDefault();

            var xhrArgs = {
                form: dojo.byId("CompanyTypeForm"),
                //handleAs: "text",
                load: function(data) {
                    console.log('submitted');
                    dojo.byId("ContentCompanyType").innerHTML = data;
                },
                error: function(error) {
                    dojo.byId("errorMessage").innerHTML = error;
                }
            }
            //Call the asynchronous xhrPost
            dojo.byId("ContentCompanyType2").innerHTML = "Form being sent..."
            var deferred = dojo.xhrPost(xhrArgs);

        });

    });
</script>

<!-- List of all Form Elements -->

<form action="/settings/companyType/1/" method="POST" id="CompanyTypeForm" style="padding: 5px">
    <!-- Select list of all Company Types -->
        <select dojoType="dijit.form.FilteringSelect" id="CompanyTypeSelection">
                <option></option>
                <option value="2">Regulators</option>
                <option value="1">Lender2</option>
        </select>
    <label for="id_name">Name</label>&nbsp;&nbsp;&nbsp;<input name="name" required="true" value="Lender2" maxLength="60" promptMessage="" type="text" id="id_name" dojoType="dijit.form.ValidationTextBox" />
    <button dojoType="dijit.form.Button" type="submit" name="submitButton" value="Submit">Update</button>
</form>

1 个答案:

答案 0 :(得分:1)

您有一个带有提交按钮的HTML表单。这将触发HTML提交没有Dojo。您还将代码连接到onSubmit事件,该事件使用xhr运行您的逻辑。 dojo.connect不替换代码,它只是在调用该方法时触发另一个方法。所以,这两件事都发生了。按设计工作。

你可能想要在这里定义一个no-op方法,或者只是调用你的方法。