2012-05-22 43 views
0

(在Firefox和IE9這是行不通的。在Chrome中,這部作品)

如果我刪除了ajax,隱藏與.hide()和.show()jQuery的干擾/顯示JQuery的作品。任何解決方案

<form id="ppform" action="blah.asp" method="post"> 
<div id="saleload">Blah</div> 
<button id="sendbutton">Send</button> 
</form> 

$(document).ready(function(){ 

    $('#saleload').hide(); 

    $('#sendbutton').click(function() { 

     $('#saleload').show(); 

     $.ajax({ 
      type: "POST", 
      url: /blah/blah.asp, 
      data: reqBody, 
      dataType: "json", 
      success:function(data,textStatus){ 

       if (data.redirect) { 
        window.location.href = data.redirect; 
       }else{ 
        $("#ppform").replaceWith(data.form); 
       } 
      } 
     }); 
    }); 
}); 
+1

'#saleload'在'#ppform'裏面嗎? – bfavaretto

+0

@bfavaretto:最有可能是這個問題。 – frenchie

+0

是的。它在#ppform的形式容器中 – Patriotec

回答

1

顯而易見的原因是您的Javascript出現錯誤導致整個部分無法執行。趕快翻翻你的代碼顯示了該行:

 url: /blah/blah.asp, 

字符串必須用引號括起來:

 url: "/blah/blah.asp", 
+0

上述重新取代元素的意見也與使您的代碼正常運行有關。然而,如果沒有這種改變,你的代碼根本無法運行。 – lonesomeday

+0

*自拍頭*忘記用引號引起來。謝謝 – Patriotec

+0

@Patriotec,這將解決你的第一個問題(記得下次看看javascript控制檯!)。現在你會面對一些新的。看到我的答案。 – bfavaretto

3

這條線:

$("#ppform").replaceWith(data.form); 

與更換整個表格內容來自您的Ajax請求的響應。這意味着您設置的點擊處理程序也將消失,因爲#sendbutton將會消失。即使您在data.form之內有另一個具有相同ID的按鈕,它也不起作用。你必須使用事件代表團來代替:

$(document).ready(function(){ 
    $('#saleload').hide(); 
    $(document).on('click', '#sendbutton', function(){ 
     $('#saleload').show(); 
     $.ajax({ 
      type: "POST", 
      url: "/blah/blah.asp", 
      data: reqBody, 
      dataType: "json", 
      success:function(data,textStatus){ 
       if (data.redirect) { 
        window.location.href = data.redirect; 
       } else { 
        $("#ppform").replaceWith(data.form); 
       } 
      } 
     }); 
    }); 
}); 

另外:你似乎張貼未定義的變量reqBody到您的服務器,並且,lonesomeday上面說的,你失蹤周圍的URL報價。

+0

是的,這解決了代碼的真正問題:在運行時更新HTML時進行動態事件處理。 – frenchie

+0

@frenchie,謝謝你的支持。是的,這解決了其中一個問題,但寂寞指出的問題並不少於「真實」。看來OP甚至沒有機會體驗我們正在談論的問題,語法錯誤阻止了ajax調用的運行。 – bfavaretto

+0

抱歉沒有看到您的帖子。寂寞很快。我相信你的代碼可以解決我所有的問題。 – Patriotec