【发布时间】:2012-04-01 08:31:07
【问题描述】:
我主要是 PHP 开发人员。我意识到,在当今时代,一种脚本语言的专业化并不能解决问题,但事实仍然是,我在 JavaScript 和 jQuery 方面的技能还算不错。我充其量是个新手。我可以创建自己的代码,但跨浏览器兼容性仍然是我在 JavaScript 中工作的一个大问题。
无论如何,我有一个根据类别/子类别过滤产品的脚本。它是这样工作的:您选择一个类别,后台的 javascript 会过滤子类别,以便显示的选项是与父类别相关的选项 - 这两者的组合过滤了产品线。
这是我的代码:
function scategories(){
//get the category option value from the category drop down bar
var cat = (document.getElementById('categories').value);
//get all the options from the subcategory drop down bar
var subcat = document.getElementsByClassName('subcategories');
var n=0;
//if the category bar option is set to 0 display everything
if(Number(cat)==0){
Show();
}
//filter the subcategories
while(subcat.item(n)){
//if there is no match b/w the subcategories option and the categories id FILTER
if(Number((subcat.item(n).value).split('|')[1]) != Number(cat) && Number(subcat.item(n).value) != 0){
document.getElementsByClassName('subcategories')
.item(n)
.style
.display="none";
}else{
//else display the subcategory
document.getElementsByClassName('subcategories')
.item(n)
.style
.display="list-item";
}
n++;
}
}
我想说,这段代码很容易解释。我还有一个ShiftFocus函数,将焦点从子类别中选择的当前选项转移到默认情况下,只要选择一个新的类别,就会“无”。这基本上重置了子类别。这是代码:
function shiftfocus(){
document.getElementsByClassName('subcategories')
.item(0)
.removeAttribute("selected");
document.getElementsByClassName('subcategories')
.item(0)
.setAttribute("selected","selected");
}
Shiftfocus 称为 onChange,类别称为 onClick。
问题 1: 1) Firefox:Shiftfocus 不会将焦点转移到默认选项,即使我可以看到它添加了 'selected' 属性。
2) Safari:根本不工作。
编辑:问题 2 是一个粗心错误的产物。我打开了一个锚标签,它是 在 IE 中造成严重破坏。在打扰你之前应该仔细检查一下 伙计们。对不起。问题 1 仍然存在。
问题 2: 我了解我们中没有一个开发人员特别喜欢 Internet Explorer。但我愿意相信我在这里犯了一个错误。我有一些 jQuery,它通过本机 POST 函数从另一个文件中的脚本中获取数据,并将其附加到 id 为“content”的表中。这适用于除 IE 之外的所有浏览器。如果我尝试回到 IE 7,8 兼容模式,结果会好一些(尽管数据显示为碎片),并且在 IE9 兼容模式下根本没有附加任何内容!代码如下:
$.post("bagcontents.php", {
"Bid": $(this).attr('bid')
},
function(data){
$("#content").empty().append(data);
roundNumber();
$('#processorder_hidden').attr('value',currentBid);
});
//append here
<div id="contents" style="overflow:auto;height:345px;padding-right:5px;">
<form name="bag_contents" id="bag_contents" method="post" action="<?php _page ;?>">
<table id="content">
</table>
<input type="hidden" id="bag_contents_hidden" name="bag_contents_hidden" value="1" />
</form>
</div>
任何帮助将不胜感激。我尝试使用警报、警报(数据)输出获取的结果,并且脚本可以正常获取所有内容。它只是失败的附加部分:|
【问题讨论】:
-
现在缩进真的很难吗?
-
哇,这解决了我所有的问题。
-
它至少解决了另一个问题:问题的可读性
-
我建议用 jQuery 重写第一段代码——这可能会解决一些跨浏览器问题。并尝试将
$("#content").empty().append(data);替换为$('#content').html(data);。此外,您可能想了解属性和属性之间的差异:api.jquery.com/prop(但我很确定这不会导致问题) -
我无法回答这个问题,但至少我清理了(转换为 jQuery)the first 2 snippets of your code。看看吧,它要短得多。
标签: javascript jquery firefox safari internet-explorer-9