无法将属性“class”设置为 undefined

Cannot set property 'class' of undefined

提问人:Chris Richards 提问时间:7/13/2017 最后编辑:itsazzadChris Richards 更新时间:2/20/2021 访问量:3166

问:

我确定我正在做一些愚蠢的事情,或者错过了一些愚蠢的事情,但我收到以下 2 条错误消息,从客户端点击按钮:

无法将属性“class”设置为 undefined

无法将属性“scrollTop”设置为 null

我所要做的就是设置 inputTextArea 的样式,然后滚动到我拥有的可滚动内容 div 的顶部。

    document.getElementById(x$("#{id:obj1Error}").Attributes["class"] = "has-error");
    var myDiv = document.getElementById(x$("#{id:contentWhiteBackground}"));
    myDiv.scrollTop = 0;

任何指示表示赞赏。干杯

更新:

按钮上的客户端代码:

// Make sure user has entered content into the first objective at minimum
var objcolparent = document.getElementById("ObjColOuter").children[0];
var objValue = objcolparent.getElementsByTagName("TEXTAREA")[0].value;

if(objValue ==""){
var o = {};
o.title = "Validation Failed";
o.body = "You must enter at least one objective before submitting";
o.alertIcon = "fa-thumbs-down fa-lg";
o.alertType = "danger";

var myDiv = document.getElementById("#{id:contentWhiteBackground}");
//document.getElementById("#{id:obj1Error}").className = "has-error";
myDiv.scrollTop = 0;
bootAlert.show('alertServer',JSON.stringify(o));
return false;
}

if(confirm("Are you sure you want to submit your objectives?")){
return true;
}else{
return false;
}

xpage 上的代码,其中包含 obj1Error div:

<xp:repeat id="repeat1" rows="100"
                            value="#{viewScope.fields}" var="fieldName">

                            <xp:text escape="true"
                                id="computedField4" styleClass="h5">


                                <xp:this.value><![CDATA[#{javascript:"Objective "+@RightBack(fieldName, 16)}]]></xp:this.value>
                            </xp:text>
                            <br />
                            <xp:div id="obj1Error">

                                <xp:text escape="true"
                                    id="computedField1" styleClass="h6">



                                    <xp:this.value><![CDATA[#{javascript:"Details"}]]></xp:this.value>
                                </xp:text>
                                <xp:inputTextarea
                                    id="inputTextarea1" style="height:100px;resize:none;"
                                    showReadonlyAsDisabled="true">
                                    <xp:this.value><![CDATA[#{document1[fieldName]}]]></xp:this.value>
                                    <xp:this.disabled><![CDATA[#{javascript:try{

var strStatus:string = document1.getItemValueString("status"); 
var booDisabled:boolean = true;

if(strStatus == "New" || strStatus == "Draft" || strStatus == "Returned") {
booDisabled = false;
}

return booDisabled;

}catch(e){
writeToLog("Error - ccObjectives disable objective details: " + e);
}}]]></xp:this.disabled>

                                </xp:inputTextarea>
                            </xp:div>
                            <br />
                        </xp:repeat>
JavaScript CSS XPacks 客户端

评论

2赞 user5014677 7/13/2017
我不确定 xpages 是什么,但从外观上看,您正在尝试混合 javascript 和 jquery。我的猜测是你要么这样做:要么document.getElementById("#{id:obj1Error}")x$("#{id:obj1Error}")
0赞 Knut Herrmann 7/13/2017
是否呈现“obj1Error”控件?请出示您的完整按钮和 obj1Error 控制代码。

答:

2赞 xpages-noob 7/13/2017 #1

你只需要写

var myDiv = document.getElementById("#{id:contentWhiteBackground}");

获取 DOM 元素。

要设置元素的类,您必须编写:

document.getElementById("#{id:obj1Error}").className = "has-error";

评论

0赞 Chris Richards 7/13/2017
scrollTop 工作,谢谢。可以肯定的是,我以前尝试过,但它不起作用,这就是我使用选择器的原因。但是,在样式方面,我遇到了与尝试 Georg 建议的 dojo 方法相同的错误:我得到:Uncaught TypeError:无法将属性“className”设置为 null。
0赞 xpages-noob 7/13/2017
这意味着无法找到具有给定 ID 的元素,因为该元素不存在,或者 ID 为空。要检查 XPages-ID 是否正确解析,您可以通过 暂时输出 ID。如果返回一个空字符串,则问题出在XPages标记上,而不是CSJS。alert("#{id:obj1Error}");
1赞 xpages-noob 7/13/2017
添加“0”是因为它是重复控件中的迭代索引。问题是您的按钮似乎不在重复控制范围之内。它必须位于内部,以便在每个重复条目中返回 obj1Error 元素的正确 ID。"#{id:obj1Error}"
2赞 xpages-noob 7/13/2017
如果只有一个元素来输出重复条目中的任何错误就足够了,那么只需将 obj1Error 移出重复控件即可
1赞 Chris Richards 7/13/2017
啊,这是有道理的,我已经将 Div 移到了重复之外,它有效。唯一的问题是它现在设置了重复中的所有字段的样式,而不仅仅是我想要的字段,但我相信我可以弄清楚。谢谢
1赞 Georg Kastenhofer 7/13/2017 #2

我建议在 xpages 中使用 dojo 工具包而不是原生 javascript:

dojo.addClass('#{id:obj1Error}','has-error');
var myDiv = dojo.byId('#{id:contentWhiteBackground}');
myDiv.scrollTop = 0;

评论

0赞 Chris Richards 7/13/2017
我得到:未捕获的 TypeError:无法读取 null 的属性“className”