2011-04-07 65 views
1

我爲一個伴侶的樂隊做了一些「你給我你的電子郵件,我給你一個棒的歌」頁面。我試圖從jQuery Facebox插件中提交時使用簡單的JavaScript表單(電子郵件)驗證工作。我發現你需要在Facebox打開或不工作後之後綁定JS驗證功能。這樣做的基礎在Facebox文檔中進行了規劃,並應該如下所示:$(document).bind('reveal.facebox', function() { ...stuff to do after the facebox and contents are revealed... })。如下所述,我認爲這不應該是這種情況,因爲我認爲Facebox只顯示了一個隱藏在Facebox CSS參數中的元素,但只有當Facebox打開時,它肯定需要綁定到事件處理程序。綁定驗證腳本在jQuery Facebox插件中形成

事實證明我只是無法讓它工作(除了在Firefox中,這意味着使用Firebug進行調試有點不行!) - 您可以將任何舊的gumpf放入電子郵件表單中,然後快速提交發送確認信息到「asdsdf」或當時輸入的任何內容。

代碼如下,我真的很感謝任何幫助!

謝謝你的時間。

豐富

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <title>Track download</title> 
    <meta name="image:Background" content="images/background.jpg" /> 
    <link rel="stylesheet" type="text/css" href="reset-min.css" /> 
    <link rel="stylesheet" type="text/css" href="facebox.css" /> 
    <link rel="stylesheet" type="text/css" href="style.css" /> 
    <script type="text/javascript" src="js/jquery.min.js"></script> 
    <script type="text/javascript" src="js/facebox.js"></script> 

    <script type="text/javascript"> 
    $(document).ready(function() { 
     $("a[rel*=facebox]").facebox(); 
     }); 
    </script> 
    <script type="text/javascript"> 
    function validateForm(){  
     var x=document.forms["emailForm"]["emailAddress"].value; 
     var atpos=x.indexOf("@"); 
     var dotpos=x.lastIndexOf("."); 
     if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length){ 
      alert("Not a valid e-mail address"); 
      return false; 
     } 
    }); 
    </script> 
</head> 
<body> 
    <div id="wrapper"> 
     <h1>Gorgeous George</h1><br /> 
     <h2><a href="#user" rel="facebox">Download</a> our new track!</h2><br /><br /> 
     <p>Follow us on <a href="http://gorgeousgeorgetheband.tumblr.com" target="_blank">Tumblr</a></p> 
     <p>Follow us on <a href="http://soundcloud.com/gorgeous-george-the-band" target="_blank">Soundcloud</a></p> 

      <div id="user"> 
       <form action="index.php" method="post" name="emailForm" onsubmit="return validateForm();"> 
       <fieldset> 
        <h3 class="black">Email Address:</h3><br /> 
        <input id="emailAddress" id="emailForm" name="emailAddress" onfocus="(this.value == &quot;Enter Email Address&quot;) ? this.value = &quot;&quot; : this.value" size="30" type="text" value="Enter Email Address" width="28" /><br /> 
        <input type="submit" value="Submit" /> 
        </fieldset> 
       </form> 
      </div>  <img src="images/gorgeousGeorge.jpg" alt="Gorgeous George" class="mainImage" /> 
    </div> 
</body> 
</html> 

回答

1

約翰·Q提到facebox創建元素的副本,以便引用任何元素窗口,我放棄一切的一類,而不是一個ID,然後提交給它這樣的:

$($('.email')[1]) 

然後,不幸的是,我不得不推出我自己的驗證,因爲任何插件仍然無法使用。這裏有一個例子:

if($($('.email')[1]).val().length <= 0){ 
    return false; 
} 

一種黑客,但希望有所幫助。

+0

class而不是id ...我是多麼的虛空 – RichieAHB 2011-07-18 11:46:45

0

據我瞭解Facebox的,模態窗口的內容總是存儲在該頁面只是隱藏(由顯示:無),直到需要。因此,您應該不需要在加載facebox之後綁定驗證,因爲元素在頁面加載時直接位於DOM中。

考慮到這一點,請嘗試以下HTML。我已經添加了jQuery驗證,因爲它很容易使用,並節省重新發明輪子。和輪我的意思是電子郵件地址格式驗證:)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> 
<head> 
    <title><!-- Insert your title here --></title> 
    <meta name="image:Background" content="images/background.jpg" /> 
    <link rel="stylesheet" type="text/css" href="reset-min.css" /> 
    <link rel="stylesheet" type="text/css" href="facebox.css" /> 
    <link rel="stylesheet" type="text/css" href="style.css" /> 
    <script type="text/javascript" src="js/jquery.min.js"></script> 
    <script type="text/javascript" src="js/facebox.js"></script> 
    <script type="text/javascript" src="http://ajax.aspnetcdn.com/ajax/jquery.validate/1.8/jquery.validate.js"></script> 

    <script type="text/javascript"> 
     $(document).ready(function() { 
      $("a[rel*=facebox]").facebox(); 

      $("#user FORM").validate({ 
       rules: { 
        emailAddress { required: true, email: true } 
       } 
      }); 
     }); 
    </script> 
</head> 
<body> 
    <div id="wrapper"> 
     <h1>Gorgeous George</h1><br /> 
     <h2><a href="#user" rel="facebox">Download</a> our new track!</h2><br /><br /> 
     <p>Follow us on <a href="http://gorgeousgeorgetheband.tumblr.com" target="_blank">Tumblr</a></p> 
     <p>Follow us on <a href="http://soundcloud.com/gorgeous-george-the-band" target="_blank">Soundcloud</a></p> 

      <div id="user"> 
       <form action="index.php" method="post" name="emailForm" onsubmit="return validateForm();"> 
       <fieldset> 
        <h3 class="black">Email Address:</h3><br /> 
        <input id="emailAddress" id="emailForm" name="emailAddress" onfocus="(this.value == &quot;Enter Email Address&quot;) ? this.value = &quot;&quot; : this.value" size="30" type="text" value="Enter Email Address" width="28" /><br /> 
        <input type="submit" value="Submit" /> 
        </fieldset> 
       </form> 
      </div>  <img src="images/gorgeousGeorge.jpg" alt="Gorgeous George" class="mainImage" /> 
    </div> 
</body> 
</html> 

有obvioulsy更多的方式來stylise驗證插件,但這至少會爲你工作。

+0

你會認爲這是事實:不需要綁定,但它確實是這種情況。我已經刪除了facebox插件,並在頁面加載時顯示了表單,驗證工作正常。這是當我在div上使用Facebox插件時,它渲染模式窗口的方式的某些方面會影響偶處理程序。我完全難倒了... – RichieAHB 2011-04-07 16:36:04

1

Facebox製作您指向它的任何頁面元素的副本......它不會隱藏/顯示帶有額外css處理的頁面元素,使其看起來像模態。

例如,如果你有一個id ='x'的表單,那麼在facebox運行後,你實際上會有兩個id ='x'的表單...... facebox從這個表單創建的表單你的原創......和你的原創。在DOM樹中,facebox元素(用戶看​​到的那個元素)將是第2個元素,並且直到facebox創建它纔會存在。

0

使用ajax調用表單存儲到一個單獨的文件,這樣你就不會有重複,然後用於驗證的腳本將工作沒有問題,除了......當然取決於錯誤消息是如何提示給用戶。