【问题标题】:Polymer JS input value can be set however not being rendered in the UI可以设置 Polymer JS 输入值,但不会在 UI 中呈现
【发布时间】:2020-12-01 15:14:12
【问题描述】:

我有两个名为 LegalNameOperatingName 的字段(字段 1 和字段 2)。当将值添加到 id="legalName" 时,应添加 eventlistener,因此当我们使用 focusout 和 tab 到字段 2 时,带有 id="operatingName" 的字段 2 的值默认为 LegalName 的值。现在这是在 Polymer 中,常规 JavaScript 事件侦听器不会看到/识别 id。然而,这就是我得到的,到目前为止,该值正在设置中,但是当我们聚焦时,它不会被渲染。任何帮助将不胜感激。

 _defaultToCompanyLegalName() {
                var el = this.$.legalName;
                if (el) {
                    this.$.commercial.addEventListener('focusout', function () {
                        this.$.operatingName.value = this.$.legalName.value;
                    })
                }
            }

id="commercial" 是父 DIV 的 id。

<div class="row" id="commercial">
            <div class="column mandatory">
                <div style="padding-right: 10px;">
                    <label for="companyLegalName">Company Legal Name</label>
                    <input id="legalName" type="text" value="{{_contract.companyLegalName::input}}" placeholder="Company Legal Name" />
                </div>
            </div>

            <div class="column">
                <div style="padding-right: 10px;">
                    <label for="companyOperatingName">Company Operating Name</label>
                    <input id="operatingName" type="text" value="{{_contract.companyOperatingName::input}}" placeholder="Company Operating Name" />
                </div>
            </div>
        </div>

【问题讨论】:

    标签: javascript forms input polymer polymer-2.x


    【解决方案1】:

    Eventlistener 被添加到 div "#contract" 上,但理想情况下它应该在输入字段 "#legalName" 上。我通过向“#legalname”输入添加 on-focusout 事件并设置属性“_contract”的值成功解决了这个问题,这将设置输入字段“#operatingName”的值,因为它已经有两种方式绑定到它。

    <link rel="import" href="../../bower_components/polymer/polymer-element.html">
    
    <dom-module id="test-main">
      <template>
        <style>
          :host {
            display: block;
          }
        </style>
        <h2>Hello [[prop1]]!</h2>
            <div class="row" id="commercial">
                <div class="column mandatory">
                    <div style="padding-right: 10px;">
                        <label for="companyLegalName">Company Legal Name</label>
                        <input id="legalName" type="text" on-focusout="_defaultToCompanyLegalName" value="{{_contract.companyLegalName::input}}" placeholder="Company Legal Name" />
                    </div>
                </div>
    
                <div class="column">
                    <div style="padding-right: 10px;">
                        <label for="companyOperatingName">Company Operating Name</label>
                        <input id="operatingName" type="text" value="{{_contract.companyOperatingName::input}}" placeholder="Company Operating Name" />
                    </div>
                </div>
            </div>
      </template>
    
      <script>
        /**
         * @customElement
         * @polymer
         */
        class TestMain extends Polymer.Element {
          static get is() { return 'test-main'; }
          static get properties() {
            return {
              prop1: {
                type: String,
                value: 'test-main'
              },
              _contract: {
                type: Object,
                value: {},
                notify: true
                
              },
            };
          } 
            _defaultToCompanyLegalName(e) {
                this.set("_contract.companyOperatingName",  this._contract.companyLegalName);
            }
            
            connectedCallback(){
                super.connectedCallback();
            }
        }
    
        window.customElements.define(TestMain.is, TestMain);
      </script>
    </dom-module>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-02
      • 2020-01-29
      • 2015-03-31
      • 1970-01-01
      • 2015-08-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多