我正在使用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无法正常工作。
我该如何解决这个问题?
答案 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)
我遇到了同样的问题,我就是这样解决的;
导航到第 45 行的 \vendor\yiisoft\yii2-jui\src\Dialog.php
并添加以下代码;
if($.fn.button && $.fn.button.noConflict !== undefined){
var bootstrapButton = $.fn.button.noConflict();
$.fn.bootstrapBtn = bootstrapButton;
}