Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/461.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如果已选择所选框,则如何在加载页面时运行onchange函数_Javascript_Jquery_Reload - Fatal编程技术网

Javascript 如果已选择所选框,则如何在加载页面时运行onchange函数

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'

我遇到了一个问题,当用户从一个简单的下拉列表中选择某个内容时,我会绘制一个ajax驱动的页面:

<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 )
{
}