2017-07-07 185 views
1

我使用下拉菜单,用户可以选择特定的主题。如果通过下拉菜单选择主题,则通过ajax弹出文本框,用户可以输入内容。刷新页面后,从on.Change函数重新加载Ajax内容

问题是,如果表单已被提交,表单中的内容丢失或者用户只是刷新页面,则当选择另一个主题时,ajax内容(文本框)会消失并且只会再次出现。

这大概是从我的AJAX脚本,它使用change,因此只有当下拉再次改变提出了ajax输入到DIV茎:

$(function() { 
$('#subjectapp1').change(function() 
{ 
var self = $(this); 

$.post("/blabla/potatoe/subjectpartial1.php", 
{ 
subject1: self.val() 
}, 
function(data) 
{ 
    $('#subjectqualidiv1').html(data); 
}); 

}); 
}); 

我的下拉菜单:

<select name="subject1" id="subjectapp1"> 
<option value="">Please choose</option> 
<?php foreach ($subjects as $subject){ ?> 
    <option <?php if ($_POST['subject1'] == $fach['subject_id']) {echo 'selected';} ?> value="<?php echo $subject['subject_id']; ?>"><?php echo $subject['subject']; ?></option> 

股利它被加载到:

<div id="subjectqualidiv1"></div> 

Ajax的内容(subjectpartial1.php)只包含一个文本框,在其中用户可以输入自己的资格。

有没有一种可能,当页面刷新,而无需再次更改主题的AJAX内容自动加载到DIV?

EDIT(工程):基础上的评论我尝试以下,这将产生预期的结果:

$(document).ready(function() { 
// For loading the ajax content on refresh/form submit 
    var subject1 = $('#subjectapp1'); 

$.post("/blabla/potatoe/subjectpartial1.php", 
{ 
subject1: subject1.val() 
}, 
function(data) 
{ 
    $('#subjectqualidiv1').html(data); 
}); 

$('#subjectapp1').change(function() 
{ 
var self = $(this); 

$.post("/blabla/potatoe/subjectpartial1.php", 
{ 
subject1: self.val() 
}, 
function(data) 
{ 
    $('#subjectqualidiv1').html(data); 
}); 

}); 
}); 

谢谢!

+1

是 - 你可以直接把AJAX的文件准备好处理程序。您还需要能够从更改事件中调用它。 –

+1

在'onchange'事件中仍然能够调用你的代码的最佳方式是将它放入一个函数,然后从'$(document).ready()'函数内调用它,这是在页面加载时执行。 –

回答

1

您可以添加你的函数调用你的AJAX的$(document).ready()函数执行的页面加载。执行你的函数之前要小心检查有效的数据,因为可能有页面加载和选择器为空的情况。对于缺少的信息,您可能需要查看HTML中的required属性,如果该元素不存在数据,将阻止表单提交。这将防止刷新数据不足。

+0

我将代码插入'$(document).ready()'函数以及事件的触发器,现在它可以工作,谢谢!你是什​​么意思检查有效数据?当值不为空时,它不仅仅是被解雇吗? – Franky2207

+0

刷新或初次加载页面时,会在页面加载时调用'$(document).ready()',但由于这些事件的默认浏览器行为,大多数数据应为空。由于这个原因,您的AJAX调用在ready函数中调用时可能会有空变量,并可能返回错误或意外结果。 – yanman1234

1

您可以与您现有的代码一起做:

$(document).ready(function() { 
$("#subjectapp1").trigger('change'); 
}