自从jQuery 3更新以来,下拉框不再正常运行。
使用jQuery迁移来帮助解决问题。
起初我以为这是一个加载问题,所以做了onload检查技巧来检查jquery是否实际被加载。
我还尝试按照jquery主网站上的最佳做法重写函数,但仍然不满意。
代码:
JS
var selectedModule = '';
function getTemplate(el){
selectedModule = $(el).attr('value');
if (selectedModule.match('!')){
selectedModule = '';
$(el).attr('value', '');
alert('Please select a template within the module.');
}
if (selectedModule != ''){
$('.showModuleName').hide();
$('#templateName').val(selectedModule);
if (selectedModule == 'custom'){
$('.showModulePath').show();
}
else {
$('.showModulePath').hide();
$('#modulePath').val(selectedModule);
}
}
else if (selectedModule == ''){
$('.showModuleName').show();
$('.showModulePath').hide();
}
}
function loadTemplate(data){
$('textarea#body').val(data);
}
function revertTemplate(){
if (confirm('By doing this you will lose any unsaved changes. Are you sure?')){
getTemplate($('select#moduleSelect'));
if (selectedModule == ''){
$('textarea#body').val("{include:header}\n\n{block1}\n\n{include:footer}");
} else {
$.get($('select#moduleSelect').attr('rel')+'/'+selectedModule, loadTemplate);
}
return true;
}
else {
return false;
}
}
$(function(){
$('select#moduleSelect').change(function(){
revertTemplate();
});
$('input#default').click(function(){
revertTemplate();
});
getTemplate($('select#moduleSelect'));
});
HTML / PHP
<div class="showModuleName">
<label for="templateName">Name:</label>
<?php echo form_input('templateName',set_value('templateName', $data['templateName']), 'id="templateName" class="formelement"'); ?>
<br class="clear" /><br/>
</div>
<label for="moduleSelect">Module:</label>
<?php
$values = array();
$values[''] = 'Not a module template';
$values['divider'] = '---------------------------';
if (in_array('blog', $this->permission->permissions)) $values['!blog'] = 'Blog';
if (in_array('blog', $this->permission->permissions)) $values['blog'] = '-- View Posts';
if (in_array('blog', $this->permission->permissions)) $values['blog_single'] = '-- Single Post';
if (in_array('blog', $this->permission->permissions)) $values['blog_search'] = '-- Blog Search Results';
$values['custom'] = 'Custom Module';
echo @form_dropdown('moduleSelect',$values, (($data['templateName'] == 'custom') ? 'custom' : $data['modulePath']), 'id="moduleSelect" class="formelement" rel="'.site_url('/admin/pages/module').'"');
?>
<span class="tip">To make a module template (e.g. for the Blog) select the module here.</span>
<br class="clear" /><br/>
<div class="showModulePath">
<label for="modulePath">Module Reference:</label>
<?php echo @form_input('modulePath',set_value('modulePath', $data['modulePath']), 'id="modulePath" class="formelement"'); ?>
<br class="clear" /><br/>
</div>
链接:
JS代码
(https://pastebin.com/QuWyjjVe)