在按钮上动态添加dijit以编程方式点击...怎么样?

时间:2010-08-02 09:13:13

标签: javascript dojo

我遇到了另一个我正在处理的dojo启用表单的问题。用户可以通过使用对话框输入数据来在页面上输入详细信息,该对话框反过来更新数据库,然后显示输入到表单的用户数据。

添加的每个元素包含2个验证文本框1 x FilteringSelect。当它被添加到页面时,它们将被添加为简单的文本框。

我尝试添加标准字符串,但这意味着dojo.parse()不会在代码上运行。我还尝试以编程方式添加元素,但只是将元素对象显示为页面的字符串。到目前为止,我有:

var xhrArgs = {
    url: url,
    handleAs: "text",
    preventCache: true,
    load: function(data){

        var idResult = parseInt(data);

        if(idResult > 0){


            var divStr = '<div id="employ_' + idResult + '" style="float:left;width:100%;">' +
             '<table width="300">' +
                '<tr>' +
                    '<td height="29"><Strong>' +
                            '<input type="text" dojoType="dijit.form.ValidationTextBox ' + 
                                'change="markEmploymentForUpdate(); ' +
                                'id="cmpy_'+ idResult +'" '+
                                'required="true" ' +
                                'promptMessage="Please enter a valid company name" ' +
                                'invalidMessage="please enter a valid company name" ' +
                                'trim="true"' +
                                'value="'+ companyname +'"/>' +
                    '</td>' +
                    '<td height="29"><input dojoType="dijit.form.FilteringSelect" store="rolestore" searchAttr="name" name="role" onchange="markEmploymentForUpdate();" id="roleInput_'+ idResult +'" value="'+ jobrole +'" ></td>' +
                    '<td height="29">' +
                        '<input type="text" dojoType="dijit.form.ValidationTextBox" onchange="markEmploymentForUpdate();"' +
                            'id="jtitle_'+ idResult + '"' +
                            'required="true"' +
                            'promptMessage="Please enter your job title"' +
                            'invalidMessage="Please enter your job title"' +
                            'value="'+ jobtitle + '"/>' +
                    '</td>' +
                    '<td height="29"><img src="/images/site/msg/small/msg-remove-small.png" border="0" onmouseover="this.style.cursor=\'pointer\';" onclick="removeEmployer(\'employ_'+ idResult +'\', '+ idResult +')" /></td>' +
                '</tr>' +
            '</table>' +
        '</div>'; 

            dijit.byId('companydetails').hide();
            dijit.byId('employername').setValue('');
            dijit.byId('jobtitle').setValue('');
            dijit.byId('jobrole').setValue('');

            dojo.byId('data-table').innerHTML += divStr;

            dojo.byId('companydetails').hide(); 


        }else{

            dojo.byId('add-error').innerHTML = '<div class="error">Unable to process your request. Please try again.</div>';

        }



    }       
};

var deferred = dojo.xhrGet(xhrArgs);

这是显示文本框,因为dojo.parse没有在此上运行。如果我用以下代码替换ValidationTextBox:

var textbox = new dijit.form.ValidationTextBox({
   id:"cmpy_" + idResult,
   required:true,
   trim:true,
   "change":"markEmploymentForUpdate();",
   promptMessage:"Please enter a valid company name",
   value:companyname
});

我只是将对象打印到页面上。

我有什么想法可以将它添加到我的页面并维护dojo组件而不是默认为文本框?

非常感谢。

1 个答案:

答案 0 :(得分:0)

设置了innerHTML后

dojo.parser.parse(dojo.byId('data-table'));