【问题标题】:Magento2 - add a small jquery which was working fine before upgradeMagento2 - 添加一个在升级前运行良好的小 jquery
【发布时间】:2018-12-23 23:14:09
【问题描述】:

我使用的代码是这样的:

jQuery(document).ready(function($){
    if(window.location.href =='https://mysite/csproduct/vproducts/new/set/4/type/simple/'){
    console.log('ready');
    $("[name='product[vendor_price]']").keyup(function() {
    $("[name='product[price]']").val($(this).val()).change();
    });
    }
});

如果我将代码粘贴到控制台中,它可以工作。 即使没有粘贴我得到的代码 console.log - 准备好了。 除此之外,控制台没有错误。

这里使用的HTML是这样的:

<div class="admin__field _required" data-bind="css: $data.additionalClasses, attr: {'data-index': index}, visible: visible" data-index="vendor_price">       
<label class="admin__field-label" data-bind="attr: {for: uid}, visible: $data.labelVisible" for="CTK9J41">

<span data-bind="attr: {'data-config-scope': $data.scopeLabel}, text: label" data-config-scope="[STORE VIEW]">Vendor Price</span>
</label>   

<div class="admin__field-control" data-bind="css: {'_with-tooltip': $data.tooltip, '_with-reset': $data.showFallbackReset &amp;&amp; $data.isDifferedFromDefault}">
<input class="admin__control-text" type="text" data-bind="
        event: {change: userChanges},
        value: value,
        hasFocus: focused,
        valueUpdate: valueUpdate,
        attr: {
            name: inputName,
            placeholder: placeholder,
            'aria-describedby': noticeId,
            id: uid,
            disabled: disabled
    }" name="product[vendor_price]" aria-describedby="notice-CTK9J41" id="CTK9J41">
    </div>
</div>


<div class="admin__field admin__field-small _required" data-bind="css: $data.additionalClasses, attr: {'data-index': index}, visible: visible" data-index="price">

<span data-bind="attr: {'data-config-scope': $data.scopeLabel}, text: label" data-config-scope="[STORE VIEW]">Price</span>
    </label>

<div class="admin__field-control" data-bind="css: {'_with-tooltip': $data.tooltip, '_with-reset': $data.showFallbackReset &amp;&amp; $data.isDifferedFromDefault}">

<div class="admin__control-addon">                

<input class="admin__control-text" type="text" data-bind="
        event: {change: userChanges},
        value: value,
        hasFocus: focused,
        valueUpdate: valueUpdate,
        attr: {
            name: inputName,
            placeholder: placeholder,
            'aria-describedby': noticeId,
            id: uid,
            disabled: disabled
    }" name="product[price]" aria-describedby="notice-JHLHU2O" id="JHLHU2O">   

<label class="admin__addon-prefix" data-bind="attr: {for: uid}" for="JHLHU2O">

<span data-bind="text: addbefore">₹</span>
</label>
    </div>
</div>

【问题讨论】:

  • 那么什么是工作?您能否提供随附的 HTML,以便我们重现问题?
  • 当然我会添加 html,尽管 magento 生成的复杂度并不高。什么不起作用 - 当我在字段 vendor-price 中输入时,应该将其复制到 product-price
  • 我在您的 HTML 中没有看到任何字段 vendor_price ...。确实 存在的是 artist_price。也许有一个混乱?
  • 是的,实际上我已经用供应商价格替换了艺术家价格,现在我已经在问题中替换了。

标签: jquery magento2


【解决方案1】:

Magento 2 使用 Knockout.js 框架来动态构建其前端的某些部分。这个构建也将在 jQuery ready 事件触发后发生。因此,当您查找带有name='product[vendor_price]' 的元素时,它可能在 DOM 中尚不可用。

让您的事件监听器工作的一种方法是使用event delegation with on

$(document).on("keyup", "[name='product[vendor_price]']", function() {
    $("[name='product[price]']").val($(this).val()).change();
});

注意:与您的问题无关,但请尝试使用“input”事件而不是“keyup”:这也将响应通过拖放、上下文菜单(清除、剪切、粘贴)所做的更改,通过其他输入设备,或者当一个键被按住并重复时。

【讨论】:

  • 非常感谢 trincot。没有你的帮助,我无法想象,我本可以解决它。完美。
猜你喜欢
  • 1970-01-01
  • 2014-12-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-28
  • 1970-01-01
  • 2018-08-27
  • 1970-01-01
相关资源
最近更新 更多