4

我想使用 jqueryui 按钮提交表单。我有一些代码,但它不起作用。这是代码:

<script type="text/javascript">
function findUrls()
{
    var text = document.getElementById("text").value;
    var source = (text || '').toString();
    var urlArray = [];
    var url;
    var matchArray;

    // Regular expression to find FTP, HTTP(S) and email URLs.
    var regexToken = /\b(http|https)?(:\/\/)?(\S*)\.(\w{2,4})\b/ig;

    // Iterate through any URLs in the text.
    if( (regexToken.exec( source )) !== null )
    {
    show_box();// this will show jquery dialog..
    return false;
    }

}

</script>

<div id="dialog" title="Dialog Title">
<p>Dialog box text.....Dialog box text....Dialog box text</p>
<button id="formSubmit">Click me</button>
</div>

<form name="myForm" id="myForm" action="http://www.bing.com" method="post" onsubmit="return findUrls();"> 
<textarea id="text"></textarea>
<input type="submit" name="submit" value="send" />
</form>

<script type="text/javascript">
function show_box(){
$(document).ready(function(){

                $( "#dialog" ).dialog({
                autoOpen: false,
                width: 400,
                buttons: [
                    {
                        text: "Yes",
                        click: function() {
                            submit_form();

                        }
                        },
                    {
                        text: "No",
                        click: function() {
                            $( this ).dialog( "close" );
                        }
                    },
                    {
                        text: "Cancel",
                        click: function() {
                            $( this ).dialog( "close" );
                        }
                    }
                ]
            });

            $( "#dialog" ).dialog( "open" );
});
}

function submi_form(){
var myForm = document.forms['myForm'];

var formSubmit = document.getElementById('formSubmit');

formSubmit.onclick = function(){
    myForm.submit();
    }
}
</script>

当一个人在文本区域中放置一个链接并提交表单时,会出现带有三个按钮的 jquery 对话框,我希望当有人单击对话框上的“是”按钮时,表单会自动提交。一切正常。但是当我单击按钮时,它不起作用。

4

3 回答 3

9

您的 submit_form 函数实际上并没有尝试提交表单。它目前正在将单击事件添加到“单击我”按钮上,如果按下该按钮将提交您的表单。

如果您想单击对话框的“是”按钮来提交表单,请尝试以下操作:

function submit_form(){
    $('#myForm').submit();
}

还要确保您的 submi_form 方法的名称在这里只是一个错字,而不是在您的实时代码中……您缺少一个“t”。

于 2012-12-04T16:53:17.220 回答
3

好吧,最开始的代码非常纠结,而且组织得非常糟糕,很抱歉这么说。一些改进的技巧:

1:将javascirpt保存到单独的js文件中,尽量避免嵌入代码。但这并不意味着根本不使用嵌入。在这种情况下,最好让它更有条理。

2:确保您在需要的代码中调用加载事件,在您的情况下,文档准备好在 show_box() 中使用,这是完全没有必要的。

3:函数 submi_form() 不是从任何地方调用的,所以此时你最好使用准备好的文档来处理点击事件

4:findUrls(),抱歉没能得到你在这部分想要完成的事情,所以绕过它。确保你保持简单,幸福就会到来)

试图修复代码以尽可能接近您的风格,所以我们在这里http://jsbin.com/idetub/1/edit

只是 javascript 供您考虑

function findUrls() {
  show_box(); // this will show jquery dialog..
  return false;

  // some broken logic below ...
  var text = document.getElementById("text").value;
  var source = (text || '').toString();
  var urlArray = [];
  var url;
  var matchArray;
  // Regular expression to find FTP, HTTP(S) and email URLs.
  var regexToken = /\b(http|https)?(:\/\/)?(\S*)\.(\w{2,4})\b/ig;
  // Iterate through any URLs in the text.
  if ((regexToken.exec(source)) !== null) {
    show_box(); // this will show jquery dialog..
    return false;
  }
}

 function show_box() {
   //$(document).ready(function(){ // no needs for that
   $("#dialog").dialog({
     autoOpen: false,
     width: 400,
     buttons: [{
       text: "Yes",
       click: function () {
         submit_form();
       }
     }, {
       text: "No",
       click: function () {
         $(this).dialog("close");
       }
     }, {
       text: "Cancel",
       click: function () {
         $(this).dialog("close");
       }
     }]
   });
   $("#dialog").dialog("open");
   //});
 }
$(document).ready(function(){
  //function submi_form() { remove this as no accual call for submit_form nowhere
    var myForm = document.forms['myForm'];
    var formSubmit = document.getElementById('formSubmit');
    formSubmit.onclick = function () {
      myForm.submit();
    };
  //}
});

UPD:是的,看起来你在这里得到了递归逻辑,它无法提交表单。

于 2012-12-04T17:14:34.223 回答
0

试试这个:

$("#myForm").submit(function() {

    var text = $('#text').val;
    var source = (text || '').toString();
    var urlArray = [];
    var url;
    var matchArray;

    // Regular expression to find FTP, HTTP(S) and email URLs.
    var regexToken = /\b(http|https)?(:\/\/)?(\S*)\.(\w{2,4})\b/ig;

    // Iterate through any URLs in the text.
    if ((regexToken.exec(source)) !== null) {
        show_box();// this will show jquery dialog..
        alert('ss');
        return false;
    }
    return false;
});​

还要onsubmit="return findUrls();"从表单中删除并在上面findUrls()的方法中添加代码$("#myForm").submit()小提琴

于 2012-12-04T17:10:38.800 回答