我真的很擅长编码,对不起,如果这些听起来很愚蠢或愚蠢。我们有一个新项目来提出一个新的网页。我有一个多条件if语句,并且如果满足条件,则想调用xsl模板。这就是我现在的方式,它根本不起作用。
<script>
function getSelectedValue()
{
if("document.getElementById('type').value==1 and document.getElementById('cablegroup5').value==9"+
"document.getElementById('cablegroup3').value==22 and document.getElementById('cablelength').value==11")
{
<xsl:call-template name="PN">
<xsl:with-param name="Cable">ABC111-06</xsl:with-param>
</xsl:call-template>
}
}
</script>
我知道第一部分有效,我已经用警告信息对其进行了测试,并且工作得很好。这些都是通过多个下拉菜单旁边的按钮(onclick)激活的。有没有办法让这个工作?任何帮助将非常感激。感谢。
答案 0 :(得分:0)
您对处理模型感到困惑。脚本元素是由XSLT生成的吗?如果是这样,则可能在生成脚本时调用call-template。在执行脚本时不会调用它。 Javascript代码不会神奇地执行XSLT指令。
答案 1 :(得分:0)
脚本中存在一些问题会阻止if
语句正确执行。
&&
而不是and
。请注意,如果您使用&
,这将是一个按位和。测试不应该是字符串。由于JavaScript类型coersion它将字符串转换为布尔值。 null
或空字符串''
将评估false
,所有其他字符串将评估true
。目前你有
if("test1 and test2")
这应该是
if(test1 && test2)
到目前为止,您更新的脚本将是
<script>
function getSelectedValue()
{
if(document.getElementById('type').value==1 &&
document.getElementById('cablegroup5').value==9 &&
document.getElementById('cablegroup3').value==22 &&
document.getElementById('cablelength').value == 11)
{
// Process Xml
}
}
</script>
您需要使用浏览器xml解析器来处理您的xml。我假设您有一个xml字符串,如果您有一个文档对象,那么您将不得不稍微更改以下内容,这是来自w3schools。
var xmlString = "<Products>" +
"<Product partnumber='foo'>This is product 1</Product>" +
"<Product partnumber='bar'>This is product 2</Product>" +
"</Products>";
// Load into an XML document
var myDoc;
if (window.DOMParser)
{
var parser=new DOMParser();
myDoc=parser.parseFromString(xmlString,"text/xml");
}
else // Internet Explorer
{
myDoc=new ActiveXObject("Microsoft.XMLDOM");
myDoc.async="false";
myDoc.loadXML(xmlString);
}
// Get all product nodes
var products = myDoc.getElementsByTagName('Product');
var i, targetProduct, partNumber;
for(i = 0; i < products.length; i += 1){
// Get the partnumber attribute
partnumber = products[i].attributes.getNamedItem('partnumber');
// Ensure that the partnumber exists and its value is what is wanted
if(partnumber && partnumber.value == 'foo'){
targetProduct = products[i];
// Exit for
break;
}
}
// If the product has been found alert its value.
if(targetProduct != null){
alert(targetProduct.textContent || targetProduct.text);
}
如果按ID选择了节点,则可以使用xmlDoc.getElementById
而不是遍历类型的所有节点并检查属性。
要选择xml节点的文本值,大多数浏览器都使用属性textContent
,尽管Internet Explorer使用text
。这条线
targetProduct.textContent || targetProduct.text
如果它存在且不为空,则返回textContent
,或text
的值。