Javascript 如果已选择所选框,则如何在加载页面时运行onchange函数
我遇到了一个问题,当用户从一个简单的下拉列表中选择某个内容时,我会绘制一个ajax驱动的页面:Javascript 如果已选择所选框,则如何在加载页面时运行onchange函数,javascript,jquery,reload,Javascript,Jquery,Reload,我遇到了一个问题,当用户从一个简单的下拉列表中选择某个内容时,我会绘制一个ajax驱动的页面: <select id = "selectdepartment"> <option id = "default">Select an option...</option> .... </select> 然后运行一些ajax到php脚本。一切都很好,问题是当我提交一个用ajax绘制的表单时(使用$\u SERVER['PHP\u SELF'
<select id = "selectdepartment">
<option id = "default">Select an option...</option>
....
</select>
然后运行一些ajax到php脚本。一切都很好,问题是当我提交一个用ajax绘制的表单时(使用$\u SERVER['PHP\u SELF'];
),数据被提交,页面被重新加载,页面被清除,但选择框仍然保留在原来的位置。用户必须移动到另一个选项,然后返回到最初选择的选项,以重新启动.change()
。那太糟糕了
我可以通过在我所有的表单中传递一个php变量来解决这个问题,然后检查每个页面加载上设置的变量,如果是,那么就绘制页面部分,但这会导致非常混乱的代码,这是不可取的
在jquery库中必须有一种方法可以做到这一点,尽管我对javascript语言的总体知识不是我想要的。如果有人有任何有用的提示,请分享,但不要为我做,我不会这样学:)
编辑:使用.trigger编写代码
$('#selectdepartment').change(function(){
var department = $('#selectdepartment').val();
var day = $('#data').data('day');
var month = $('#data').data('month');
var year = $('#data').data('year');
//alert (department);
if(department === "Select an option..."){
$('.hiddenuntildepartmentisselected').css({"display":"none"});
}
else{
$('.hiddenuntildepartmentisselected').css({"display":"block"});
}
showpoints(department);
drawpointstable(department, day, month, year);
displaytheuseresforselecteddepartment(department, '');
$('#sendthedepartment').val(''+department+'');
$('#hiddendepartmentidforaddinganewpoint').val(''+department+'');
}).trigger('change');//end run functions
加载页面后,您可以使用该函数立即触发更改
事件处理程序:
$('#selectdepartment').change(function() {
// code here
}).trigger('change');
或者,如果需要通过JavaScript/jQuery在别处调用它:
$('#selectdepartment').trigger('change'); // or just .change() as a shorthand
已更新 表单按钮可以使用
onClick
属性,该属性将调用一种方法来解析表单字段,并通过.ajax()
将数据发布到php脚本中
然后,在success
事件方法中,检查需要修改的任何标志,并根据需要修改元素
基本示例:
.ajax()的内部
当然,您需要在您的案例中适当地设置flagtocheck
希望有帮助
关于编辑的注释
这篇文章被编辑得更具描述性,更容易理解。由于提问者已经在使用.ajax()
方法,因此success
事件方法是完成提问者要求的操作的理想场所。直接修改元素的方法调用比使用它调用.trigger()
或.change()
要少1次,后者随后也直接修改元素。您是否在change函数中放置了一个console.log以查看是否调用了触发器?我确信这是可行的,但现在由于某种原因,它并没有在精选中占据一席之地。哦,好吧,是时候开始使用php了。谢谢@尼克-您只需在代码中键入console.log(“您的消息”)
。然后它将显示在chrome开发者工具控制台选项卡中。@EmmyS是否以任何方式支持alert()
。它不会立即对用户可见(因此侵入性较小),不会阻止脚本执行(没有弹出窗口进行确认),以有用的格式显示对象(尽管它依赖于浏览器)。唯一的缺点是,如果开发人员工具(F12)尚未打开,Internet Explorer将在控制台上抛出一个错误。日志语句。如果他们使用AJAX提交表单,那么无论如何都不需要触发更改事件,因为由它绘制的所有页面部分仍然存在。这不是一个坏建议,但对他们来说可能是一个非常重要的工作。@anthony grist我从未建议在已经使用AJAX
提交表单时触发CHANGE
事件。我建议使用AJAX
方法的ONSUCCESS
事件直接设置元素,就像调用了.change()一样。唯一不同的是,我没有为他们提供另一种选择,也没有给他们一个深入的解释。我不同意在不必要时使用额外的事件,因为这是另一种方法调用,效率较低,也不容易阅读。
$('#selectdepartment').trigger('change'); // or just .change() as a shorthand
...
url: 'xxx.xxx.xxx',
async: true,
type: 'POST',
dataType: 'html',
data: JSON.stringify( form_fields ),
beforeSend: function()
{
// Pre send stuff, like starting a loading gif
},
success: function( data, textStatus, xhr )
{
// Be sure you load the page with the content first
$( '#containing-div' ).html( data );
// Do your check here, and modify your element if needed here
if( flagtocheck === 'xxx' )
{
// Modify the element in question...
}
// I call a custom method termed `.ctrls()` here that makes any
// adjustments to the DOM once its loaded/updated.
},
error: function( xhr, textStatus, errorThrown )
{
}