我有以下HTML代码:
<html>
<!-- assume jquery is loaded -->
<body>
<form id="sform" method="get" style="display:none;">
<input type="hidden" name="eid" />
<input type="hidden" name="returnURL" />
<input type="hidden" name="returnID" value="ieid" />
<select id="dropdownlist" name="ieid">
<option selected="selected"></option>
</select>
</form>
</body>
</html>
用户输入的是电子邮件地址,它会(在服务器端使用PHP)检查凭据,如果有效,则返回以下JSON对象(在这种情况下,假设值是有效的URL(即。{{ 1}}):
http://sitehere.com/somethingelse
当用户点击主页上的{
"get_action" : "geturl",
"eid" : "eidurl",
"return_url" : "returnurl",
"option_url" : "optionurl"
}
按钮时,会检索此项。此按钮触发login
请求,该请求检索结果并将JSON解析为上面的表单。然后,我在提交表单之前,从原始代码和表单本身的操作中更改表单的值。如下所示。
POST
$.post('/?c=controller&a=method', {'email' : $('input[name="email"]').val() }, function(data){
var result = $.parseJSON(data);
$('#sform').change_action(result.get_action);
$('input[name="eid"]').change_val(result.eid);
$('input[name="returnURL"]').change_val(result.return_url);
$('select[name="ieid"]').find('option:selected').change_val(result.option_url);
$('#sform').submit();
};
和change_val()
定义如下:
change_action()
我之所以定义这些功能是因为最初我刚刚调用$.fn.change_val = function(v){
return $(this).val(v).trigger("change");
}
$.fn.change_action = function(v){
return $(this).attr('action', v).trigger("change");
}
而且表单似乎根本没有更新。我读到在提交表单时使用jQuery更新表单时必须触发更改。
然而,即使在触发更改后,似乎HTML仍未更新(至少在Chrome中)并且表单未正确提交,因为没有任何值实际更改。
因此,我需要能够获取解析后的结果,更新表单中的值(使用特定的ID),然后提交表单以便它重新指向某个地方。有没有办法正确地做到这一点?