当脚本选择单选按钮时,paper-radio-group-changed 不触发
paper-radio-group-changed not firing when a radio button is selected by script
我有一个 paper-radio-group
监听事件 paper-radio-group-changed
。当有人手动单击单选按钮时,此事件会完美触发,但在脚本分配时不会触发。这是我如何通过脚本分配它
<paper-radio-group id="prg">
<paper-radio-button name="a">A</paper-radio-button>
<paper-radio-button name="b">B</paper-radio-button>
<paper-radio-button name="c">C</paper-radio-button>
</paper-radio-group>
...
<script>
$("#prg").selected = "a";
$(document).on('paper-radio-group-changed', '#prg', {}, function (e) {
//Whatever here is not executed
});
</script>
更多观察:
单选按钮"a"
实际上被选中了。但是该事件永远不会被解雇。为什么?我是否选择了错误的事件监听器或需要额外的事件监听器?
你需要用 Polymer 思考。
html
<paper-radio-group selectedAttribute="name" selected="{{selected}}">
js
this.selected = "a";
/*
* observer on the property, selected
*/
当通过 select(itemName)
: 方法发生 select 离子变化时,会触发 paper-radio-group-changed
// paper-radio-group-changed
let prg = document.querySelector('#prg');
prg.select('b');
prg.addEventListener('paper-radio-group-changed', e => {
alert('paper-radio-group-changed');
});
// jQuery on() works as well
通过使用 Polymer.IronSelectableBehavior
的 selected-changed
事件可以监听 selected
属性的变化:
// selected-changed
prg.selected = 'b';
prg.addEventListener('selected-changed', e => {
alert('selected-changed');
});
查找有关 paper-radio-group 及其活动的更多信息 here。
关于 jQuery + Polymer
的两个注释
阴影中的元素 DOM 与 jQuery 并不容易 select。
使用 jQuery 设置自定义属性并不总是符合 Polymer 的预期:
$('#prg').attr({foo: 'bar'}); // These syntaxes should work
$('#prg').attr('foo': 'bar');
// However for the attribute 'selected', being a valid HTML
// attribute which accepts a true/false (set/undefined) value pair,
// the value is ingored by jQuery resulting in selected="selected"
$('#prg').attr('selected', 'b');
所以在这种情况下 select 使用 document.querySelector()
可能更安全。
请注意,如果您将 <paper-radio-group id="prg">
放置在另一个聚合物元素(即 <my-app></my-app>
)内,您可以使用 this.$
:
访问它
class MyApp extends Polymer.Element {
static get is() { return 'my-app' }
ready() {
super.ready();
this.$.prg.selected = 'b';
}
}
https://www.polymer-project.org/2.0/docs/devguide/dom-template#node-finding
我有一个 paper-radio-group
监听事件 paper-radio-group-changed
。当有人手动单击单选按钮时,此事件会完美触发,但在脚本分配时不会触发。这是我如何通过脚本分配它
<paper-radio-group id="prg">
<paper-radio-button name="a">A</paper-radio-button>
<paper-radio-button name="b">B</paper-radio-button>
<paper-radio-button name="c">C</paper-radio-button>
</paper-radio-group>
...
<script>
$("#prg").selected = "a";
$(document).on('paper-radio-group-changed', '#prg', {}, function (e) {
//Whatever here is not executed
});
</script>
更多观察:
单选按钮"a"
实际上被选中了。但是该事件永远不会被解雇。为什么?我是否选择了错误的事件监听器或需要额外的事件监听器?
你需要用 Polymer 思考。
html
<paper-radio-group selectedAttribute="name" selected="{{selected}}">
js
this.selected = "a";
/*
* observer on the property, selected
*/
select(itemName)
: 方法发生 select 离子变化时,会触发 paper-radio-group-changed
// paper-radio-group-changed
let prg = document.querySelector('#prg');
prg.select('b');
prg.addEventListener('paper-radio-group-changed', e => {
alert('paper-radio-group-changed');
});
// jQuery on() works as well
通过使用 Polymer.IronSelectableBehavior
的 selected-changed
事件可以监听 selected
属性的变化:
// selected-changed
prg.selected = 'b';
prg.addEventListener('selected-changed', e => {
alert('selected-changed');
});
查找有关 paper-radio-group 及其活动的更多信息 here。
关于 jQuery + Polymer
的两个注释阴影中的元素 DOM 与 jQuery
使用 jQuery 设置自定义属性并不总是符合 Polymer 的预期:
$('#prg').attr({foo: 'bar'}); // These syntaxes should work
$('#prg').attr('foo': 'bar');
// However for the attribute 'selected', being a valid HTML
// attribute which accepts a true/false (set/undefined) value pair,
// the value is ingored by jQuery resulting in selected="selected"
$('#prg').attr('selected', 'b');
所以在这种情况下 select 使用 document.querySelector()
可能更安全。
请注意,如果您将 <paper-radio-group id="prg">
放置在另一个聚合物元素(即 <my-app></my-app>
)内,您可以使用 this.$
:
class MyApp extends Polymer.Element {
static get is() { return 'my-app' }
ready() {
super.ready();
this.$.prg.selected = 'b';
}
}
https://www.polymer-project.org/2.0/docs/devguide/dom-template#node-finding