错误浏览器阻止我的表单 - 在ajax的成功中单击提交按钮

时间:2017-03-31 03:29:17

标签: javascript ajax forms submit

当我在ajax成功点击提交按钮时,我遇到了浏览器阻止我的提交表单(在新标签中提交)的问题。

首先:我使用ajax将我的文本翻译成中文并将结果放到此表单的文本字段中。在Ajax的成功函数中,我把$(“我的提交按钮”)。click()。然后我的表单没有提交,因为浏览器阻止了它:

这是我的表格:

  <?php 
    $catnews = CatNews::model()->findAll();
    echo CHtml::beginForm(['site/timkiemtaobao'], 'post', ['target' => '_blank']) . CHtml::textField('txtkeyword', '', ['placeholder' => 'Nhập theo sản phẩm, danh mục, hay nhãn hiệu tìm kiếm', 'class' => 'xx'])
        . CHtml::link('<img src="images/source/search.png">', 'javascript:void(0)', ['class' => 'btntim', 'id' => 'btntimkiem'])
        . CHtml::dropDownList('search', '', CHtml::listData($catnews, 'id', 'name'), ['class' => 'searchdrop']) ?>
    <div class="clearfix"></div>
    <?php echo CHtml::textField('stringtimkiem', "", ['class' => 'hidden']) . CHtml::button('1', ['class' => 'hidden', 'id' => 'subbtn']) . CHtml::endForm(); ?>

这是我的js:

$(document).on('click', '#btntimkiem', function() { // this for translate to chinese
  if ($("#txtkeyword").val() != '') {
    var c = $("#txtkeyword").val();
    $.ajax({
      url: "https://translate.yandex.net/api/v1.5/tr.json/translate?key=myapikey",
      type: 'get',
      dataType: 'json',
      async: false,
      data: {
        text: c,
        lang: "vi-zh"
      },
      beforeSend: function() {
        $("#txtkeyword").attr('disabled', 'disabled');
        $("#btntimkiem").attr('disabled', 'disabled');
      },
      success: function(data) {
        console.log(data.text[0]);
        $("#stringtimkiem").val(data.text[0]);
        $("#subbtn").attr('type', 'submit').click().removeAttr('type');

      }
    });
    $("#txtkeyword").removeAttr('disabled');
    $("#btntimkiem").removeAttr('disabled');
  }
});

所以我很累,因为我试图修复它2天但没有修复。 我期待着你的帮助。非常感谢。

2 个答案:

答案 0 :(得分:0)

我希望您的处理程序和您的ajax都不会被执行,并且表单正在作为普通表单执行。您可以通过添加console.log语句并在浏览器的开发人员工具中检查网络活动来检查这一点。

您需要为表单添加id,例如:

CHtml::beginForm(['site/timkiemtaobao'], 'post', ['id' => 'btntimkiem']) 

答案 1 :(得分:0)

如果它出现在新标签中,请尝试将代码放入$(document).ready(); 我强烈建议你不要使用async false flag。做它是异步,然后

complete: $("#txtkeyword").removeAttr('disabled');
$("#btntimkiem").removeAttr('disabled');