Select amp 事件后的选项元素
Select option element after event on amp
我想在用户更改第一个下拉菜单后自动 select 第二个和第三个下拉菜单中的一个选项。
<body>
<h1>Hello AMPHTML World!</h1>
<label for="color">Color</label>
<select name="color" id="color" on="change:size.focus">
<option disabled selected></option>
<option value="blue">blue</option>
<option value="red">red</option>
<option value="green">green</option>
</select>
<label for="size">Size</label>
<select name="size" id="size">
<option disabled selected></option>
<option value="small">small</option>
<option value="medium">medium</option>
<option value="big">big</option>
</select>
<label for="material">Material</label>
<select name="material" id="material">
<option disabled selected></option>
<option value="paper">paper</option>
<option value="plastic">plastic</option>
<option value="wood">wood</option>
</select>
</body>
到目前为止,我只找到了动作 focus
,但如果有 select(value=small)
这样的东西就好了。任何想法或解决方法?谢谢!
您可以使用 amp-bind
来实现。当您 select 第一个下拉列表中的选项设置具有所需值的状态。为了演示,我创建了一个状态来存储一个映射,即要设置哪个值对应于 selection,如下所示:
<amp-state id="mapping">
<script type="application/json">
{
"blue" : "small",
"red" : "medium",
"green" : "big"
}
</script>
</amp-state>
然后我们要在下拉列表中设置一个对应selection的状态如下:
<select name="color" id="color" on="change:AMP.setState({ val : mapping[event.value] })">
现在我们必须在第二个下拉列表中的每个 option
中绑定 selected
属性,以便在相应的值设置为 val
时评估为真,如下所示:
<select name="size" id="size">
<option disabled selected></option>
<option value="small" [selected]=" val == 'small' ">small</option>
<option value="medium" [selected]=" val == 'medium' ">medium</option>
<option value="big" [selected]=" val == 'big' ">big</option>
</select>
注意:不要忘记添加 amp-bind
脚本
<script async custom-element="amp-bind" src="https://cdn.ampproject.org/v0/amp-bind-0.1.js"></script>`
select 选项值没有动作和事件,您可以使用 amp-bind
<!doctype html>
<html ⚡>
<head>
<meta charset="utf-8">
<link rel="canonical" href="amp-bind.html">
<meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1">
<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
<script async src="https://cdn.ampproject.org/v0.js"></script>
<script async custom-element="amp-bind" src="https://cdn.ampproject.org/v0/amp-bind-0.1.js"></script>
</head>
<body>
<label for="color">Color</label>
<select name="color" id="color" on="change:AMP.setState({ optionValue: true })">
<option disabled selected></option>
<option value="blue">blue</option>
<option value="red">red</option>
<option value="green">green</option>
</select>
<label for="size">Size</label>
<select name="size" id="size">
<option disabled selected></option>
<option [selected]="optionValue" value="small">small</option>
<option value="medium">medium</option>
<option value="big">big</option>
</select>
<label for="material">Material</label>
<select name="material" id="material">
<option disabled selected></option>
<option [selected]="optionValue" value="paper">paper</option>
<option value="plastic">plastic</option>
<option value="wood">wood</option>
</select>
</body>
</html>
另一种方法是使用 html 中的技巧而不使用 amp-bind
<!doctype html>
<html ⚡>
<head>
<meta charset="utf-8">
<link rel="canonical" href="amp-bind.html">
<meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1">
<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
<script async src="https://cdn.ampproject.org/v0.js"></script>
<script async custom-element="amp-bind" src="https://cdn.ampproject.org/v0/amp-bind-0.1.js"></script>
</head>
<body>
<label for="color">Color</label>
<select name="color" id="color" on="change:fsize.hide,size.show,fmaterial.hide,material.show">
<option disabled selected></option>
<option value="blue">blue</option>
<option value="red">red</option>
<option value="green">green</option>
</select>
<label for="size">Size</label>
<select id="fsize">
<option disabled selected></option>
</select>
<select hidden name="size" id="size">
<option value="small">small</option>
<option value="medium">medium</option>
<option value="big">big</option>
</select>
<label for="material">Material</label>
<select id="fmaterial">
<option disabled selected></option>
</select>
<select hidden name="material" id="material">
<option value="paper">paper</option>
<option value="plastic">plastic</option>
<option value="wood">wood</option>
</select>
</body>
</html>
我想在用户更改第一个下拉菜单后自动 select 第二个和第三个下拉菜单中的一个选项。
<body>
<h1>Hello AMPHTML World!</h1>
<label for="color">Color</label>
<select name="color" id="color" on="change:size.focus">
<option disabled selected></option>
<option value="blue">blue</option>
<option value="red">red</option>
<option value="green">green</option>
</select>
<label for="size">Size</label>
<select name="size" id="size">
<option disabled selected></option>
<option value="small">small</option>
<option value="medium">medium</option>
<option value="big">big</option>
</select>
<label for="material">Material</label>
<select name="material" id="material">
<option disabled selected></option>
<option value="paper">paper</option>
<option value="plastic">plastic</option>
<option value="wood">wood</option>
</select>
</body>
到目前为止,我只找到了动作 focus
,但如果有 select(value=small)
这样的东西就好了。任何想法或解决方法?谢谢!
您可以使用 amp-bind
来实现。当您 select 第一个下拉列表中的选项设置具有所需值的状态。为了演示,我创建了一个状态来存储一个映射,即要设置哪个值对应于 selection,如下所示:
<amp-state id="mapping">
<script type="application/json">
{
"blue" : "small",
"red" : "medium",
"green" : "big"
}
</script>
</amp-state>
然后我们要在下拉列表中设置一个对应selection的状态如下:
<select name="color" id="color" on="change:AMP.setState({ val : mapping[event.value] })">
现在我们必须在第二个下拉列表中的每个 option
中绑定 selected
属性,以便在相应的值设置为 val
时评估为真,如下所示:
<select name="size" id="size">
<option disabled selected></option>
<option value="small" [selected]=" val == 'small' ">small</option>
<option value="medium" [selected]=" val == 'medium' ">medium</option>
<option value="big" [selected]=" val == 'big' ">big</option>
</select>
注意:不要忘记添加 amp-bind
脚本
<script async custom-element="amp-bind" src="https://cdn.ampproject.org/v0/amp-bind-0.1.js"></script>`
select 选项值没有动作和事件,您可以使用 amp-bind
<!doctype html>
<html ⚡>
<head>
<meta charset="utf-8">
<link rel="canonical" href="amp-bind.html">
<meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1">
<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
<script async src="https://cdn.ampproject.org/v0.js"></script>
<script async custom-element="amp-bind" src="https://cdn.ampproject.org/v0/amp-bind-0.1.js"></script>
</head>
<body>
<label for="color">Color</label>
<select name="color" id="color" on="change:AMP.setState({ optionValue: true })">
<option disabled selected></option>
<option value="blue">blue</option>
<option value="red">red</option>
<option value="green">green</option>
</select>
<label for="size">Size</label>
<select name="size" id="size">
<option disabled selected></option>
<option [selected]="optionValue" value="small">small</option>
<option value="medium">medium</option>
<option value="big">big</option>
</select>
<label for="material">Material</label>
<select name="material" id="material">
<option disabled selected></option>
<option [selected]="optionValue" value="paper">paper</option>
<option value="plastic">plastic</option>
<option value="wood">wood</option>
</select>
</body>
</html>
另一种方法是使用 html 中的技巧而不使用 amp-bind
<!doctype html>
<html ⚡>
<head>
<meta charset="utf-8">
<link rel="canonical" href="amp-bind.html">
<meta name="viewport" content="width=device-width,minimum-scale=1,initial-scale=1">
<style amp-boilerplate>body{-webkit-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-moz-animation:-amp-start 8s steps(1,end) 0s 1 normal both;-ms-animation:-amp-start 8s steps(1,end) 0s 1 normal both;animation:-amp-start 8s steps(1,end) 0s 1 normal both}@-webkit-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-moz-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-ms-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@-o-keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}@keyframes -amp-start{from{visibility:hidden}to{visibility:visible}}</style><noscript><style amp-boilerplate>body{-webkit-animation:none;-moz-animation:none;-ms-animation:none;animation:none}</style></noscript>
<script async src="https://cdn.ampproject.org/v0.js"></script>
<script async custom-element="amp-bind" src="https://cdn.ampproject.org/v0/amp-bind-0.1.js"></script>
</head>
<body>
<label for="color">Color</label>
<select name="color" id="color" on="change:fsize.hide,size.show,fmaterial.hide,material.show">
<option disabled selected></option>
<option value="blue">blue</option>
<option value="red">red</option>
<option value="green">green</option>
</select>
<label for="size">Size</label>
<select id="fsize">
<option disabled selected></option>
</select>
<select hidden name="size" id="size">
<option value="small">small</option>
<option value="medium">medium</option>
<option value="big">big</option>
</select>
<label for="material">Material</label>
<select id="fmaterial">
<option disabled selected></option>
</select>
<select hidden name="material" id="material">
<option value="paper">paper</option>
<option value="plastic">plastic</option>
<option value="wood">wood</option>
</select>
</body>
</html>