jquery-ui – jQueryUI .dialog(“close”)在ajax调用后不起作用

前端之家收集整理的这篇文章主要介绍了jquery-ui – jQueryUI .dialog(“close”)在ajax调用后不起作用前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我使用jQueryUI的对话框与模态窗体选项打开一个弹出窗体。当用户单击按钮时,它将其输入提交到数据库,然后关闭对话框。一切都在工作,除非关闭对话框。 (手动关闭按钮的工作原理;它从PHP数据库脚本返回后不会自动关闭,这是脚本代码(我试图加粗不行的行,显然你不能嵌入代码标签中的粗体) ,但线条被双星号包围,使其脱颖而出,这些不是实际代码的一部分!)
  1. <script>
  2. $(function() {
  3. // a workaround for a flaw in the demo system (http://dev.jqueryui.com/ticket/4375),ignore!
  4. $( "#dialog:ui-dialog" ).dialog( "destroy" );
  5.  
  6. var name = $( "#name" ),email = $( "#email" ),company = $( "#company" ),plate = $( "#plate"),allFields = $( [] ).add( name ).add( email ).add( company ).add( plate ),tips = $( ".validateTips" );
  7.  
  8. function updateTips( t ) {
  9. tips
  10. .text( t )
  11. .addClass( "ui-state-highlight" );
  12. setTimeout(function() {
  13. tips.removeClass( "ui-state-highlight",1500 );
  14. },500 );
  15. }
  16.  
  17. function checkLength( o,n,min,max ) {
  18. if ( o.val().length > max || o.val().length < min ) {
  19. o.addClass( "ui-state-error" );
  20. updateTips( "Length of " + n + " must be between " +
  21. min + " and " + max + "." );
  22. return false;
  23. } else {
  24. return true;
  25. }
  26. }
  27.  
  28. function checkRegexp( o,regexp,n ) {
  29. if ( !( regexp.test( o.val() ) ) ) {
  30. o.addClass( "ui-state-error" );
  31. updateTips( n );
  32. return false;
  33. } else {
  34. return true;
  35. }
  36. }
  37.  
  38. $( "#dialog-form" ).dialog({
  39. autoOpen: false,height: 390,width: 350,position: 'top',modal: true,zIndex: 3000,buttons: {
  40. "Submit your plate": function() {
  41. var bValid = true;
  42. allFields.removeClass( "ui-state-error" );
  43.  
  44. bValid = bValid && checkLength( plate,"plate code",1,7 );
  45. bValid = bValid && checkLength( email,"email",6,80 );
  46. bValid = bValid && checkLength( company,"company",100);
  47.  
  48. bValid = bValid && checkRegexp( email,/^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i,"eg. ismi@instoremarketer.org" );
  49.  
  50.  
  51. if ( bValid ) {
  52.  
  53. var nameStr = name.val();
  54. var emailStr = email.val();
  55. var companyStr = company.val();
  56. var plateStr = plate.val();
  57.  
  58. var string = 'name='+ nameStr+'&email='+emailStr+'&company='+companyStr+'&plate='+plateStr;
  59. //alert('string: '+string);
  60.  
  61.  
  62. $.ajax({
  63. type: "POST",url: "submit_plate.PHP",data: string,dataType: 'json',cache: false,success: function(returnData){
  64. alert(returnData.msg);
  65. if(returnData.error === false) {
  66. **$( this ).dialog( "close" );**
  67. }
  68. else {
  69. alert("Error: "+returnData.msg);
  70. }
  71. }
  72.  
  73. });
  74.  
  75.  
  76. }
  77. },Cancel: function() {
  78. $( this ).dialog( "close" );
  79. }
  80. },close: function() {
  81. allFields.val( "" ).removeClass( "ui-state-error" );
  82. }
  83. });
  84.  
  85. $( "#submit-plate" )
  86. //.button()
  87. .click(function() {
  88. $( "#dialog-form" ).dialog( "open" );
  89. });
  90. });
  91. </script>

有任何想法吗?
EDITED添加PHP代码

  1. <?PHP
  2. include('../cfg/ez_sql.PHP');
  3. include('../cfg/db_setup.PHP');
  4.  
  5. $err = false;
  6. if (isset($_REQUEST['plate'])) {
  7.  
  8. $raw = "INSERT INTO dot_plate_submissions (plate_code,plate_name,plate_company,plate_email) VALUES ('%s','%s','%s')";
  9. $clean = sprintf($raw,MysqL_real_escape_string($_REQUEST['plate']),MysqL_real_escape_string($_REQUEST['name']),MysqL_real_escape_string($_REQUEST['company']),MysqL_real_escape_string($_REQUEST['email']));
  10.  
  11. //error_log("cleaned query: $clean");
  12.  
  13. $db->query($clean);
  14. }
  15. else {
  16. $err = true;
  17. }
  18.  
  19. if($err) {
  20. $return['error'] = true;
  21. $return['msg'] = "There was an error submitting your plate";
  22. }
  23. else {
  24. $return['error'] = false;
  25. $return['msg'] = "made it to PHP";
  26. }
  27. echo json_encode($return);
  28. ?>

所以即使错误错误的,ajax调用仍然会收回两个数据。

解决方法

更改您的$ .ajax调用以包含上下文,所以$(this)在回调中有效:
  1. $.ajax({
  2. type: "POST",context: $(this),success: function(returnData){
  3. if(returnData.error === false) {
  4. $( this ).dialog( "close" );
  5. } else {
  6. alert("Error: "+returnData.msg);
  7. }
  8. }
  9. });

猜你在找的jQuery相关文章