Yii2与JQuery冲突。 TypeError:$(...)。对话框不是一个函数

时间:2017-05-09 15:09:39

标签: jquery yii2

我正在使用Yii2 Framework。我和jQuery有冲突。我在特定视图中使用了jQuery对话框,但它没有工作: 收到此错误:TypeError: $(...).dialog is not a function

我通过添加以下代码禁用了config / web.php中Yii2的默认javascript:

'assetManager' => [
        'bundles' => [
            'yii\web\JqueryAsset' => [
                'js'=>[]
            ],
            'yii\bootstrap\BootstrapPluginAsset' => [
                'js'=>[]
            ],
        ],
    ],

然后我使用以下代码在特定视图中添加了最新的JQuery:

<?php   $this->registerJsFile('@web/js/jquery-3.2.1.js',['position' => \yii\web\View::POS_HEAD]);
    $this->registerJsFile('@web/js/jquery-ui.js',['position' => \yii\web\View::POS_HEAD]); ?>

然后我在相同的视图中注册了我的JS代码:

<?php
        $this->registerJs(
            "$(document).ready(function($){
                 $('.add-product-button').on('click', function() {
                     var pid = $(this).attr('id');
                     var qty = $('#txt-qty-' + pid).val().trim();
                     $.ajax({
                         url: '?r=sales-order/addproduct',
                         data: {id: pid, value: qty},
                         beforeSend: function(){
                             $('#dialog').html('Adding product...');
                             $('#dialog').dialog();
                         },
                         success: function(data) {
                           $('#dialog').dialog('close');
                          }
                    });

                    return false;
                });

            }); ",
            View::POS_END,
            'my-button-handler'
        );
        ?>
    <?php }; ?>

以上使jQuery对话框起作用。但是yii2 javascript无法正常工作。

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:0)

首先,让Yii2 jquery资产保持原样。你得到的错误是由于onResume()函数的使用,如果我没有错,它不是jQuery的一部分,而是jQuery UI。然后,您只需要向页面添加jQuery UI。

你可以用不同的方式做到这一点。在途中将安装Yii2 official JUI extension并将其添加到您正在使用的资产包的depends部分中。或者,如果您经常使用它,您可以将其配置为依赖于Yii2的默认jquery资产:

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onResume() {
        super.onResume();

        SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());

        // Name
        String name = sharedPreferences.getString(SettingsFragment.KEY_PREF_NAME, "DEFAULT_VALUE");

        // Do something with name
        ................
        ........................
    }
}

答案 1 :(得分:0)

我遇到了同样的问题,我就是这样解决的;

  1. 导航到第 45 行的 \vendor\yiisoft\yii2-jui\src\Dialog.php 并添加以下代码;

    if($.fn.button && $.fn.button.noConflict !== undefined){
    
        var bootstrapButton = $.fn.button.noConflict();
    
        $.fn.bootstrapBtn = bootstrapButton;
    
    }