为什么显示隐藏javascript会在cms中引起问题
代码应该显示或隐藏CMS内部表单上的输入(和其他元素)。但是,有些附件的行为就好像它们被删除了一样,无法处理或发送。如果我不发布几页代码并解释CMS特定代码,您能告诉我关于这段可能导致问题的代码块的情况吗 这就是我将问题缩小到的相关代码为什么显示隐藏javascript会在cms中引起问题,javascript,html,Javascript,Html,代码应该显示或隐藏CMS内部表单上的输入(和其他元素)。但是,有些附件的行为就好像它们被删除了一样,无法处理或发送。如果我不发布几页代码并解释CMS特定代码,您能告诉我关于这段可能导致问题的代码块的情况吗 这就是我将问题缩小到的相关代码 function setShowHide(num, min) { var terminate = false; if (num < 0) // minus { for(x = 4; x > 0; x--)
function setShowHide(num, min)
{
var terminate = false;
if (num < 0) // minus
{
for(x = 4; x > 0; x--)
{
if(terminate != true)
{
if(showHideArray[x] == 1 && AttArray[x] == 0)
{
hide(x + 1);
showHideArray[x] = 0;
terminate = true;
}
}
}
}
if (num > 0) // plus
{
for(x = 0; x < 5; x++)
{
if(terminate != true)
{
if(showHideArray[x] == 0)
{
Show(x + 1);
showHideArray[x] = 1;
terminate = true;
}
}
}
}
}
function hide(i) {
changeObjectVisibility("Attachmenttd" + i, "none");
changeObjectVisibility("Attachment" + i + "File", "none");
changeObjectVisibility("Attachment" + i + "Description", "none");
changeObjectVisibility("Attachment" + i + "If", "none");
}
function Show(j) {
changeObjectVisibility("Attachmenttd" + j, "inline");
changeObjectVisibility("Attachment" + j + "File", "inline");
changeObjectVisibility("Attachment" + j + "Description", "inline");
changeObjectVisibility("Attachment" + j + "If", "inline");
}
function changeObjectVisibility(objectId, newVisibility) {
// first get the object's stylesheet
var styleObject = getStyleObject(objectId);
// then if we find a stylesheet, set its visibility
// as requested
//
if (styleObject) {
styleObject.display = newVisibility;
return true;
} else {
return false;
}
}
function getStyleObject(objectId) {
// checkW3C DOM, then MSIE 4, then NN 4.
//
if (document.getElementById(objectId)) {
return document.getElementById(objectId).style;
}
else if (document.all && document.all(objectId)) {
return document.all(objectId).style;
}
else if (document.layers && document.layers[objectId]) {
return document.layers[objectId];
} else {
return false;
}
}
函数设置显示隐藏(num,min)
{
var=false;
if(num<0)//减
{
对于(x=4;x>0;x--)
{
如果(终止!=真)
{
if(showHidarray[x]==1&&AttArray[x]==0)
{
隐藏(x+1);
showhidarray[x]=0;
终止=真;
}
}
}
}
如果(num>0)//plus
{
对于(x=0;x<5;x++)
{
如果(终止!=真)
{
if(showHiderRay[x]==0)
{
显示(x+1);
showhidarray[x]=1;
终止=真;
}
}
}
}
}
函数隐藏(一){
changeObjectVisibility(“附件”+i,“无”);
changeObjectVisibility(“附件”+i+“文件”、“无”);
changeObjectVisibility(“附件”+i+“说明”、“无”);
changeObjectVisibility(“附件”+i+“如果”、“无”);
}
函数显示(j){
changeObjectVisibility(“附件”+j,“内联”);
changeObjectVisibility(“附件”+j+“文件”、“内联”);
changeObjectVisibility(“附件”+j+“说明”、“内联”);
changeObjectVisibility(“附件”+j+“如果”、“内联”);
}
函数changeObjectVisibility(objectId,newVisibility){
//首先获取对象的样式表
var styleObject=getStyleObject(objectId);
//然后,如果我们找到一个样式表,设置它的可见性
//应要求
//
if(样式对象){
styleObject.display=newVisibility;
返回true;
}否则{
返回false;
}
}
函数getStyleObject(objectId){
//检查W3CDOM,然后检查MSIE4,然后检查NN4。
//
if(document.getElementById(objectId)){
return document.getElementById(objectId).style;
}
else if(document.all&&document.all(objectId)){
返回文档.all(objectId).style;
}
else if(document.layers&&document.layers[objectId]){
返回文档。层[objectId];
}否则{
返回false;
}
}
我可以看到您的代码有几个问题(这可能解释您抱怨的症状,也可能解释不了):
您的两个for循环未在相同的数组元素上运行:
for(x = 4; x > 0; x--)
for(x = 0; x < 5; x++)
另外请注意,您没有声明x
,因此它将是一个全局性的-如果代码的其他部分也有未声明的x
,则可能会对代码的其他部分产生负面影响
我不认为它会导致任何问题,但是您不需要terminate
变量和if(!terminate)
之类的东西-这就是它的用途
您永远不会使用min
参数
关于
getStyleObject()
函数,您真的需要支持没有getElementById()的浏览器吗?或者这是为了允许提供的参数可能是id或名称吗?这是您的确切代码吗?我看到了很多东西,比如if(num>0)
,其中
被编码为实体
,而不是if(num>0)
。如果您的CMS正在输出JavaScript,这可能是您的问题。另一方面,如果这些实体是您从某种HTML代码显示中复制/粘贴此代码的结果,请将其编辑为正确的JavaScript。我格式化了代码并用正确的符号替换了编码的HTML。如果这是不正确的编辑,请将其回滚。下一次,请缩进您的代码,以便人们能够更快速地阅读并帮助您请记住我文章中的那一行——我不会发布几页代码并解释CMS特定的代码——实体是必需的,或者CMS引发系统xml异常。将来我将花时间缩进代码。不,cms不缩进任何代码,事实上,每次我保存它时,它都会经常把它搞砸。Michael,你能解释一下cms输出javascript的更多情况吗,以及它是如何影响我的脚本的@迈克尔·汉克斯想知道答案。我会用你的评论来提高我未来的编码技能。目前,脚本工作正常,直到附件无法在cms中显示或识别为止。是否有任何其他原因会导致cms不显示附件?今天晚些时候我将更新一些已经提到的改进。关于getStyleObject(),我从cms支持的社区获得了这些代码和支持函数。您是说thjis函数用于跨浏览器支持,可以用getElementById()替换,并且在大多数浏览器中仍然有效吗?
for(x = 4; x >= 0; x--) // >= 0 rather than > 0