Javascript 使用jQuery(1.8)将dojo combobox(1.8.1版)作为行元素之一动态添加行

Javascript 使用jQuery(1.8)将dojo combobox(1.8.1版)作为行元素之一动态添加行,javascript,jquery,dojo,html-table,Javascript,Jquery,Dojo,Html Table,我正在尝试使用jQuery动态插入行。除了combobox没有出现在行中之外,它可以很好地处理以下代码。我已经解析了组合框,但它仍然没有出现,并在行中显示“Design Abbr[Widget dijit.form.combobox,solutionabbr]”。事实上,我希望这里有一个组合框。谁能帮我解决这个问题。我对jquery和dojo都使用1.8版本 var maxcount = 0; require(["dojo/parser", "dojo/dom", "dojo/store/M

我正在尝试使用jQuery动态插入行。除了combobox没有出现在行中之外,它可以很好地处理以下代码。我已经解析了组合框,但它仍然没有出现,并在行中显示“Design Abbr[Widget dijit.form.combobox,solutionabbr]”。事实上,我希望这里有一个组合框。谁能帮我解决这个问题。我对jquery和dojo都使用1.8版本

 var maxcount = 0;
 require(["dojo/parser", "dojo/dom", "dojo/store/Memory", "dijit/form/ComboBox", "dojo/domReady!"],
 function(parser, dom, Memory, ComboBox){
        this.addBlock =  function() {
        maxcount += 1;
        var stateStore = new Memory({data: [{name:"Alabama", id:"AL"},
{name:"Alaska", id:"AK"},{name:"Armed Forces the Americas", id:"AA"},
{name:"California", id:"CA"},{name:"Connecticut", id:"CT"}]});
        var comboBoxId = "solutionAbbr"+maxcount;
        var comboBox = new ComboBox({id: comboBoxId, name: "solutionAbbr",
value: "California",store: stateStore,searchAttr: "name"}, "stateSelect");
        //parser.parse.then(function(comboBox) {document.getElementById("solutionAbbr"+maxcount)});
        parser.parse(dijit.byId(comboBoxId));
        //alert(dijit.byId(comboBoxId).get('value'));


    $('<tr id="idForNewRow'+maxcount+'">'
        +'<td colspan="4">'
            +'<table id="idForBorder">'
                +'<tr class="even">'
                    +'<th align="left"><font color="red">Design Abbr</font></th>'
                    +'<td align="left" valign="bottom" colspan="3">'
                    +comboBox+'</td>'
                +'</tr>'
        +'</table></td></tr><tr><td colspan="4"><a href="javascript:removeRow('
            +maxcount+')">Remove</a>').insertAfter("[id*=idForNewRow]:last");
    }
});
var maxcount=0;
require([“dojo/parser”、“dojo/dom”、“dojo/store/Memory”、“dijit/form/ComboBox”、“dojo/domReady!”),
函数(解析器、dom、内存、组合框){
this.addBlock=函数(){
maxcount+=1;
var stateStore=新内存({data:[{name:“Alabama”,id:“AL”},
{姓名:“阿拉斯加”,id:“AK”},{姓名:“美洲武装部队”,id:“AA”},
{姓名:“加利福尼亚”,id:“CA”},{姓名:“康涅狄格”,id:“CT”}];
var comboBoxId=“solutionAbbr”+maxcount;
var comboBox=new comboBox({id:comboBoxId,名称:“solutionAbbr”,
值:“California”,存储:stateStore,searchAttr:“name”},“stateSelect”);
//parser.parse.then(函数(组合框){document.getElementById(“solutionAbbr”+maxcount)});
parser.parse(dijit.byId(comboBoxId));
//警报(dijit.byId(comboBoxId.get('value'));
$(''
+''
+''
+''
+“设计缩写”
+''
+组合框+“”
+''
+'')。插入后面(“[id*=idForNewRow]:last”);
}
});

在插入中,必须使用comboBox.domNode::

 $('<tr id="idForNewRow'+maxcount+'">'
    +'<td colspan="4">'
        +'<table id="idForBorder">'
            +'<tr class="even">'
                +'<th align="left"><font color="red">Design Abbr</font></th>'
                +'<td align="left" valign="bottom" colspan="3">'
                +comboBox.domNode+'</td>'
            +'</tr>'
    +'</table></td></tr><tr><td colspan="4"><a href="javascript:removeRow('
        +maxcount+')">Remove</a>').insertAfter("[id*=idForNewRow]:last");
$(“”
+''
+''
+''
+“设计缩写”
+''
+comboBox.domNode+“”
+''
+'')。插入后面(“[id*=idForNewRow]:last”);
此外,如果手动将其放置在页面上,还可以从新的ComboBox contstructor中取出“stateSelect”。这就是当您希望小部件将自身放置在页面上时放置domid的位置

另外,您不应该使用parser.parse命令,而应该在将应用程序startup插入页面::comboBox.startup()后调用它

编辑(由于comboBox.domNode创建了一个节点对象,因此上面的编辑将不起作用):: 为了让它更简单,我只想颠倒顺序。首先添加html,然后创建小部件,小部件将能够将自己添加到页面中

    $('<tr id="idForNewRow' + maxcount + '">' + '<td colspan="4">' + 
      '<table id="idForBorder">' + 
      '<tr class="even">' + 
      '<th align="left"><font color="red">Design Abbr</font></th>' + 
      '<td align="left" valign="bottom" colspan="3" id="select' + maxcount + '"></td>'+
      '</tr>'+
    '</table></td></tr><tr><td colspan="4">'+
      '<a href="javascript: removeRow('+maxcount+')">Remove</a>').insertAfter("[id*=idForNewRow]:last");

    var stateStore = new Memory({data: [{name:"Alabama", id:"AL"},
    {name:"Alaska", id:"AK"},
    {name:"Armed Forces the Americas", id:"AA"},
    {name:"California", id:"CA"},
    {name:"Connecticut ", id:"CT"}]});

    var comboBoxId = "solutionAbbr"+maxcount;
    var comboBox = new ComboBox({id: comboBoxId, name: "solutionAbbr",
    value: "California",store: stateStore,searchAttr: "name"}, "select"+maxcount);
    comboBox.startup();
<代码>$(''+''+ '' + '' + “设计缩写”+ ''+ ''+ ''+ '')。插入后面(“[id*=idForNewRow]:last”); var stateStore=新内存({data:[{name:“Alabama”,id:“AL”}, {姓名:“阿拉斯加”,id:“AK”}, {姓名:“美洲武装部队”,id:“AA”}, {姓名:“加利福尼亚”,id:“CA”}, {名称:“康涅狄格州”,id:“CT”}]}); var comboBoxId=“solutionAbbr”+maxcount; var comboBox=new comboBox({id:comboBoxId,名称:“solutionAbbr”, 值:“California”,存储:stateStore,searchAttr:“name”},选择“+maxcount); comboBox.startup();

您好,谢谢您的帮助。我插入了comboBox.domNode而不是comboBox。现在,当新行出现时,单击“添加行”按钮,它会显示“[object HtmlLevel]”(之前显示的是[Widget dijit.form.ComboBox,solutionAbbr1]”)。有什么提示吗?同样根据您的建议,我已经删除了“stateSelect”“从新的组合框contstructor。但此时,我主要关心的是在页面上创建新行时显示此组合框。当前在新的动态行中,我得到“[object HtmlDevice]”。请检查我的代码,并让我知道任何解决方案。我是新手,请查看我刚刚添加的帖子的第二部分。改用这种方法会更容易