我想将焦点+光标放置在repreat控件内的“编辑框”(最后一个)上。 重复项位于面板(panelRep)中。 然后,我在面板外有一个按钮。

这是按钮的客户端代码,几乎可以使用。.焦点已设置(字段周围为蓝色边框),但光标未置于字段中。 用户仍然必须单击该字段才能写输入。

没有重点的示例:
没有重点

重点示例:
有重点

按钮的客户端代码,该按钮将焦点设置到最后一个Edit Box,其中id包含字符串inputKode:

try {
var el = dojo.query('div[id*="inputKode"]');
var node = el[el.length-1];
setTimeout(function() { node.focus(); }, 500);
//node.focus();
} catch (e) { } 

panelRep的代码:

<xp:panel id="panelRep">
            <xp:repeat id="repeat1" rows="12" var="row" indexVar="idx"
                value="#{view1}" repeatControls="false">
                <xp:panel id="panelLinje">
                    <xp:this.data>
                        <xp:dominoDocument formName="frmPBudKodeVerdi"
                            var="dsdoc" action="editDocument" computeWithForm="both"
                            documentId="#{javascript:row.getUniversalID();}">                           
                        </xp:dominoDocument>
                    </xp:this.data>
                    <xp:table style="width:800.0px">
                        <xp:tr>
                            <xp:td style="width:100px">
                                <xp:inputText id="inputKode"
                                    value="#{dsdoc.KodeNr}" style="width:62px">
                                    <xp:this.attrs>
                                        <xp:attr name="tabindex"
                                            value="#{javascript:return idx + '1';}">
                                        </xp:attr>
                                    </xp:this.attrs>
                                    <xp:typeAhead mode="partial"
                                        minChars="1" var="lukey" valueMarkup="true" id="typeAhead1">
                                        <xp:this.valueList><![CDATA[#{javascript://var type = compositeData.type;
                                        return TypeAheadKode2(sessionScope.type,lukey);
                                        }]]></xp:this.valueList>    
                                    </xp:typeAhead>
                                    <xp:eventHandler event="onchange"
                                        submit="true" refreshMode="partial" refreshId="panelLinje">
                                        <xp:this.action><![CDATA[#{javascript:onChangeKode();}]]></xp:this.action>
                                    </xp:eventHandler>
                                </xp:inputText>                             
                            </xp:td>
                            <xp:td style="width:450px">
                                <xp:inputText id="inputNavn"
                                    value="#{dsdoc.KodeNavn}" style="width:440px"
                                    readonly="true">
                                </xp:inputText>
                            </xp:td>
                            <xp:td style="width:60px">
                                <xp:inputText id="inputNorm"
                                    style="width:45px" value="#{dsdoc.NormPrProd}"
                                    rendered="#{javascript:viewScope.visNorm}" readonly="true">
                                    <xp:this.attrs>
                                        <xp:attr name="tabindex"
                                            value="#{javascript:return idx + '2';}">
                                        </xp:attr>
                                    </xp:this.attrs>
                                    <xp:this.converter>
                                        <xp:convertNumber
                                            type="number">
                                        </xp:convertNumber>
                                    </xp:this.converter>
                                </xp:inputText>
                            </xp:td>
                            <xp:td style="width:50px">
                                <xp:inputText id="inputAntall"
                                    style="width:45px" value="#{dsdoc.NormAntall}"
                                    rendered="#{javascript:viewScope.visNorm}">
                                    <xp:this.converter>
                                        <xp:convertNumber
                                            type="number">
                                        </xp:convertNumber>
                                    </xp:this.converter>
                                    <xp:eventHandler
                                        event="onchange"
                                        submit="true"
                                        refreshMode="partial"
                                        refreshId="inputTimer">
                                        <xp:this.action><![CDATA[#{javascript:onChangeAntall()}]]></xp:this.action>
                                    </xp:eventHandler>
                                    <xp:this.attrs>
                                        <xp:attr name="tabindex"
                                            value="#{javascript:return idx + '3';}">
                                        </xp:attr>
                                    </xp:this.attrs>
                                </xp:inputText>
                            </xp:td>
                            <xp:td
                                style="width:50px;text-align:right">
                                <xp:inputText id="inputTimer"
                                    value="#{dsdoc.Timer}" style="width:45px;text-align:right">
                                    <xp:this.converter>
                                        <xp:convertNumber
                                            type="number">
                                        </xp:convertNumber>
                                    </xp:this.converter>
                                    <xp:this.attrs>
                                        <xp:attr name="tabindex"
                                            value="#{javascript:return idx + '4';}">
                                        </xp:attr>
                                    </xp:this.attrs>
                                </xp:inputText>
                            </xp:td>
                            <xp:td>                             
                            </xp:td>
                        </xp:tr>
                    </xp:table>
                    <xp:eventHandler event="onClientLoad" submit="true"
                        refreshMode="norefresh">
                    </xp:eventHandler>
                </xp:panel>
            </xp:repeat>
</xp:panel>

#1楼 票数:0 已采纳

更新22.09.2012:

@MarkyRoden-感谢您指出正确的方向。

完善dojo.query选择器后,我得到了1行代码。

var el = dojo.query('div[id*="inputKode"] .dijitInputField > input').at(-1)[0].focus(); 



原始帖子:

我发现被设置为焦点的元素不是 INPUT元素。 元素ID以widget_开头

例如,如果重复中有8行,则widget_view:_id1:_id2:_id3:repeat1:8:inputKode

然后,我发现该元素的nodeType为DIV。通过查看element.innerHTML,我发现它具有多个子代。

我尝试使用element.querySelector或element.querySelectorAll,但是我无法让它们为该元素工作,所以我最终遍历了element.childNodes。 不是很漂亮,但是现在可以工作了。

我确信可以通过将元素添加到dojo.query选择器中或使用jquery来做得更好。 必须稍后再调查。

好吧,这是我为CC放入onClientLoad事件中的代码:

var el = dojo.query('div[id*="inputKode"]');
var node = el[el.length-1];
node.focus();

var activeElementId = document.activeElement.id;
var activeElement = dojo.byId( activeElementId );
var kids = activeElement.childNodes;

for(var i=0; i < kids.length; i++)
{
    if(kids[i].className == 'dijitReset dijitInputField dijitInputContainer')
    {
    var elementDiv = kids[i];
    var elementDivKids = elementDiv.childNodes;

    for(var j=0; j < elementDivKids.length; j++)
    {
        var elementInput = elementDivKids[j];
        elementInput.focus();
    }
    } 
}

问候,佩特

  ask by user1674918 translate from so

未解决问题?本站智能推荐:

1回复

XPages:如何隐藏编辑框控件?

我想使用编辑框控件来存储某些内容,但是我不想在UI中显示编辑框。 我试图将渲染或加载的属性设置为false,但编辑框控件未显示,但由于未渲染,因此无法访问该控件。 有任何想法吗? 感谢帮助。
1回复

XPages时间编辑框-设置开始时间

似乎自Fixpack 6起,我们用于设置时间值的编辑框已发生了一些变化。 如果使用时间选择器弹出窗口,则选择始终以0:00开始。 如何将第一次设置为例如8:00? 在属性列表中看不到任何设置开始时间的选项。
2回复

添加编辑框的值?

这似乎是一个简单的问题。 我的xPage上有几个Edit框。 用户可能输入也可能不输入整数值。 字段设置为接受整数。 我想要总计这些字段中的所有值。 我有以下,这是有效的,但它似乎非常低效。 有更简单的方法吗?
2回复

将自定义控件中的编辑框动态绑定到托管bean

我已经阅读了一些关于自定义控件中动态绑定字段的优秀帖子和文章,但他们都假设了一个文档数据源。 我想允许托管bean数据源的可能性。 我尝试将属性类型设置为com.ibm.xsp.model.DataSource或com.ibm.xsp.extlib.model.ObjectDataSour
3回复

将编辑框控件绑定到托管bean中的特定Vector元素?

我有一个测试成绩的分数向量,作为我的Assignment类的属性。 我在xpage上有一个编辑框,我想编辑该值并写回托管bean中的Vector。 编辑框的值绑定是: <xp:this.value><![CDATA[#{rpt.scores[rowIndex]}]]>
3回复

以编程方式将自定义控件中的编辑框绑定到表单域

我有一个包含一系列字段的注释表单,例如city_1,city_2,city_3等。 我有一个XPage,在该XPage上我有一个重复。 重复基于具有10个值1-10的数组 return(repArray); 在重复过程中,我有一个自定义控件,用于将字段city_1到city_10
2回复

在自定义控件中读取ssjs中的value编辑框

我有一个带有模态编辑框的自定义控件: <xp:inputText id="inputText1"></xp:inputText> 在按钮的onclick事件中,我想读取此editbox的值 当然,这在自定义控件中不起作用,因为他没有inputText1的句柄。
2回复

编辑框控件中的值未通过SSJS保存在Notes文档中

在自定义控件上,我将数据源绑定到面板控件: 在面板中,我有一些“编辑框”控件,例如 当我尝试通过SSJS保存文档时,未保存编辑框: 我想念什么? 在xpage上重复自定义控件。 自定义控件具有自己的保存按钮,调用saveAttachment()函数