2011-07-25 46 views
0

我在使用jQuery ajax提交表单后点击按钮有点麻烦。这里是我的HTML是什么样子:jQuery按钮点击不工作后,在IE浏览器上提交表单提交

<div> 
    <!-- normal HTML buttons that are overridden by JQuery for styling purposes --> 
    <!-- Here, on render, the HTML button is hidden and a similar JQuery button is shown on  the DOM --> 
</div> 
<div> 
    <!--- Stuff generated by a third-party tool --> 
</div> 
<div> 
    <!--- Our form loaded using JQuery --> 
</div> 

上面提到的按钮实际上是由第三方工具放入DOM和网页渲染,我们接管他们通过隐藏按钮和生产JQuery的按钮,然后模仿原始按钮的行为。所以,基本上,用户可以在表单中填写第三方的东西,填写我们的表单,然后点击JQuery按钮,我们首先将我们的表单提交给服务器,然后点击原始按钮,这样第三方工具可以提交它自己的东西。下面是我们的提交表单代码:

clickoriginalbutton = function(passedButton) { 
    $(passedButton).click(); 

}, 
//save our data 
submitourform = function(buttonreference) { 
    $('#our_form').ajaxForm(options); 

    $('*').button('disable'); 
    $('#our_form').ajaxSubmit({ 
     iframe: true, 
     dataType: 'json', 
     success: function(data){ 
      if (data.status == 'success') { 
         clickoriginalbutton (getOrigButton(buttonreference)); 
       };            
      } 
     }); 
} 

正如你可以看到,原来的按钮被点击在保存表单的成功。按钮点击在FF中正常工作,但在IE中失败。我可以看到我们的表单已经提交并且成功回来了,但是IE并没有触发原始按钮的点击。我已经检查过,所有对按钮的引用都很好。我也在这里的论坛上搜索并找到了live/delegate等,但不知道他们是否会为我工作,因为我们的按钮总是在那里,他们不是通过渲染。 ajax - 事实上,没有什么是通过渲染。 ajax在第一次加载之后。所以,不知道为什么按钮点击在FF上工作时不能在IE上工作。任何想法为什么会发生这种情况。

感谢, 尼廷

+0

Clickoriginalbutton的内容是什么? jQuery有一个“触发器”方法,可以让你引发事件,这将调用对象的附加处理程序。如果一个处理程序没有被触发,那么它就不会被附加到事件上,所以你想查看处理程序是否被清除了。 – enamrik

+0

clickoriginalbutton的内容与post相同 - 它只是在传递的按钮上调用click()函数。 clickoriginalbutton也被称为没有Ajax提交的地方,在这些情况下,它在IE上也可以很好地工作;只有当我提交我们的表单并调用clickorignal按钮时,该按钮才不会被点击。如果我从submitourourform函数中删除ajaxSubmit调用,按钮会被点击罚款。另外,尽管我的帖子显示了使用Form插件,但我也尝试了使用相同结果的JQuery .ajax - 按钮只是不会在IE中单击。 – legendofawesomeness

+0

因此,它看起来像在IE中JQuery不能将点击事件绑定到原始按钮。我改变了clickoriginalbuttons代码,并使用正常的JavaScript点击,并开始在IE中工作。现在我的代码是这样的:var origButton = document.getElementById($(daButton).attr(“id”)); origButton.click();问题现在解决:) – legendofawesomeness

回答

0

所以它看起来像在IE中JQuery不能将点击事件绑定到原始按钮。我改变了clickoriginalbuttons代码,并使用正常的JavaScript点击,并开始在IE中工作。现在我的代码是这样的:var origButton = document.getElementById($(daButton).attr(“id”)); origButton.click();问题现在解决:)

0

您是否尝试过使用jQuery的 '.live()' 函数?你说这些按钮被插入到DOM中,因此点击功能将不起作用,因为事件只会在页面加载时被绑定。如果使用.live(),它将为已经存在且将来存在的任何DOM元素绑定事件。

+0

嗨杰米,感谢您的答案。在发布之前,我给了live()一个尝试,并且不适合我 - 因为这些按钮没有被动态插入,它们在页面加载时不会改变。无论如何,根据我对帖子的最后评论,我通过使用document.getElementById(mybuttonid).click()而不是Jquery单击来解决问题。再次感谢。 – legendofawesomeness

+0

不用担心 - 你可能想自己发表一个答案,并接受它只是为了制止混乱,很高兴你想出了它:)。 – Jamie

+0

当然,只是等待锁定期(根据我的特权)才能结束。 :) – legendofawesomeness

相关问题