2014-06-20 78 views
-1

代碼:Joomla網站 - 有一個表單調用一個JavaScript函數 - 但它也重定向我的網址 - 爲什麼?

的javascript:

<script type="text/javascript" src="//ajax.googleapis.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script> 

<script type="text/javascript"> 
function scroll(pos) 
{ 
    var x = location.hash; 
    var scrolamount = pos; 
    console.log(scrolamount); 
    $('html, body').animate(
    { 
     scrollTop: scrolamount 
    }, 400); 
    var d = document.createElement("div"); 
    d.style.height = "101%"; 
    d.style.overflow = "hidden"; 
    document.body.appendChild(d); 
    setTimeout(function() 
    { 
     d.parentNode.removeChild(d); 
    }, 100); 
    return false; 
} 
</script> 

HTML

此功能將顯示警報,然後返回頁面正常

<div id="tester"> 
<form action="javascript:alert('action sent');" > 
<input type="submit" value="But1"> 
</form> 

這種形式的滾動預期的頁面,但然後立即將URL重定向到主頁面

<div id="but1"> 
<form onsubmit="scroll(400)" > 
<input type="submit" value="But1"> 
      </form>  
</div> 
+0

的[調用JavaScript函數後不提交表單]可能重複(http://stackoverflow.com/questions/19124564/dont-submit-form-after-calling-javascript-function ) – JJJ

回答

2

您無法阻止表單提交。嘗試添加此:

onsubmit="scroll(400); return false;" 
+0

這樣做 - 謝謝你,你能解釋爲什麼或引用的東西,所以我明白爲什麼這個作品? – morty346

+0

你也可以'return scroll(400)',因爲函數返回false。或者更好的是,根本不要使用內聯事件處理程序。 – JJJ

+1

@ morty346基本上,'onsubmit'屬性是一個事件處理程序。像表單這樣的元素具有默認行爲。表單將數據發送到'action'屬性中指定的頁面,重定向瀏覽器。默認行爲可以通過'event.preventDefault'來防止,但內聯處理程序無法訪問它。在另一個上重新運行false,將'preventDefault'和'stopPropagation'(如果你想知道的話,搜索這些termd)。 Usualy,一位有經驗的開發人員永遠不會使用內聯操作。這是一個非常糟糕的做法。 –

相關問題