2014-07-04 131 views
1

所以基本上我試圖做的是阻止訪問提交信息。我通常通過onsubmit = CheckForm()來做到這一點,如果返回false,那麼數據就不會被髮送。 在這段代碼中,我使用了不同的函數,並沒有找到一種方法可以返回false並且不允許繼續。不允許使用Javascript

*該功能基本上說,如果輸入的URL是一個有效的圖像,或不是由警報。警報後,它發送數據。我希望它顯示警報,但只是不發送任何東西,但刷新(例如)。

的Javascript:

 var test = function() { 
      document.getElementById('image2').src = document.getElementById('image').value; 
     } 

     var errorCallback = function() { 
      alert('Image did not exist'); 
      return false; 
     } 

     var loadCallback = function() { 
      alert('Image existed'); 
     } 

HTML:

<p style="font-size:20px; font-family:Arial; font-weight:800;">URL to prested Image: </p><input type="text" id="image" name="image" class="URLs" value="http://"/> 


     <p><input type="submit" class="myButton" style="padding: 25px 150px; line-height:6px;" value="Submit Details" onclick="test()" /></p> 
     <img style="display: none" id="image2" onerror="errorCallback()" onload="loadCallback()" /> 

提前感謝!

+0

「*如果返回'false',那麼數據將不會被髮送*」。這種行爲是非標準的(但是被廣泛支持)。取消默認操作的唯一標準方式是[事件。preventDefault()方法'](https://developer.mozilla.org/en-US/docs/Web/API/event.preventDefault)。 – Oriol

回答

0

的第一步是防止服從發生的默認操作,即:

function test(e) 
{ 
    e.preventDefault(); 
    // ... 
} 

<button type="submit" ... onclick="test.call(this, event);" ... > 

以上綁定元素爲thistest()函數中,並將e發泄物體。

第二步需要加載圖像的異步操作,所以擺脫所有其他功能和隱藏的圖像;那麼繼續下去:

function test(e) 
{ 
    e.preventDefault(); 

    var form = this.form; // keep reference of the form 

    var i = new Image(); // create image object 
    i.onload = function() { 
     form.submit(); // hurray, it works, save it! 
    }; 

    i.onerror = function() { 
     alert('awww, image did not exist'); 
    }; 

    // all set, load the image! 
    i.src = document.getElementById('image').value; 
} 
+0

非常感謝,這對我有用! 您能否介紹一下下面幾行代碼: onclick =「return test.call(this);」 - 什麼叫。和這個? i.src = document.getElementById('image')。value; - 我有一個關於這個問題;這行代碼定義了圖像的src,它在上面的函數中使用。那怎麼會呢?它不應該放在函數的上面嗎?(只是一個合乎邏輯的問題 - 我知道它可以同時工作) – user3804691

+0

@ user3804691'this'在'onclick =「」'指的是元素,所以'test .call(this)''也將'test()'函數綁定爲'this'。 –

+0

@ user3804691'.src'只是在'Image'對象上設置一個屬性,就像'.onclick'和'.onerror'一樣。在最後一點只設置'.src'的技巧是避免緩存命中不調用'.onload()'。 –

2

Option 1:在函數中返回false。

通過在onclick處理程序中返回false,它將阻止提交事件發生。

變化:

var test = function() { 
    document.getElementById('image2').src = document.getElementById('image').value; 
}; 

<p><input type="submit" class="myButton" style="padding: 25px 150px; line-height:6px;" value="Submit Details" onclick="test()" /></p> 

要:

var test = function() { 
    document.getElementById('image2').src = document.getElementById('image').value; 
    return false; 
}; 

<p><input type="submit" class="myButton" style="padding: 25px 150px; line-height:6px;" value="Submit Details" onclick="return test()" /></p> 

Option 2:傳遞事件處理程序,並阻止發生默認事件。

變化:

var test = function() { 
    document.getElementById('image2').src = document.getElementById('image').value; 
}; 

<p><input type="submit" class="myButton" style="padding: 25px 150px; line-height:6px;" value="Submit Details" onclick="return test()" /></p> 

要:

var test = function (e) { 
    document.getElementById('image2').src = document.getElementById('image').value; 
    e.preventDefault(); 
}; 

<p><input type="submit" class="myButton" style="padding: 25px 150px; line-height:6px;" value="Submit Details" onclick="return test(event)" /></p> 

Option 3:更改inputtype=button爲不會觸發submit事件。

變化:

<p><input type="submit" class="myButton" style="padding: 25px 150px; line-height:6px;" value="Submit Details" onclick="test()" /></p> 

要:

<p><input type="button" class="myButton" style="padding: 25px 150px; line-height:6px;" value="Submit Details" onclick="test()" /></p> 
+0

第二次修復應該是'var test = function(e){// ...' – andlrc

+1

嘿,謝謝。但我不同意。在所有的方法中,不管是否激活loadCallback或errorCallback,它都會不斷返回false。我實際上試圖做的是返回true,如果激活loadCallback(Image存在),則繼續;如果errorCallback被激活(Image不存在),則返回false。 – user3804691

+0

您的問題是您如何防止表單提交,並且我試圖向您展示各種方式。如果它不同,請隨時更新您的問題。 –

相關問題