2011-05-01 203 views
14

我有一個列表(一個簡單列表),我可以從中選擇和設置元素(使用js),然後是一個表單,允許我選擇多少個元素以及一個提交表單。如果沒有選擇一個元素,那麼會有一個引發異常的腳本。問題是,我希望表單不提交,如果沒有選擇一個元素,但不拋出一個異常,但向我展示一個消息提交按鈕(使用jQuery)。我下面的腳本:提交表單之前的jquery

<? foreach ($types as $type):?> 
<ul class = "product_types"> 
    <? if ($type->stock_2 > 0):?> 
    <li id = 'product_types'><a href="#" onclick='selecteazaElement(<?= $type->id; ?>,<?= $type->stock_2; ?>);'><?= $type->label; ?></a></li> 
    <? else: ?> 
    <li id = 'product_unavailable_types'><label><?= $type->label; ?></label></li> 
    <? endif; ?> 

</ul> 
<? endforeach; ?> 
<form name="addtobasket" method="POST" action="<?= Route::url('Add to Basket', array('sale_id' => $sale->id)); ?>"> 
    <input type="hidden" name="idOfSelectedItem" id="idOfSelectedItem" value="-1"> 
    <select name="number" id="number"> 
     <option value=0>Alege numarul de produse</option> </select> 
    <button type="submit" name = "submit" onclick="addtobasket";>Adauga in cos</button><br /> 
</form> 

和設置列表元素的JS:

<script type="text/javascript"> 
    function selecteazaElement(id,stock) 
    { 
    document.addtobasket.idOfSelectedItem.value=id; 
    window["canSubmit"] = true; 
    var number23=document.addtobasket.number; 
    number23.options.length=0; 
    if (stock>=6) 
    stock=6; 
    for (i=1;i<=stock;i++) 
    { 
//alert ('id: '+id+'; stock: '+stock); 
    number23.options[number23.options.length]=new Option(i, i); 
    } 
//window.status="my status"; 
} 
+2

JavaScript在瀏覽器中看到並呈現的html上。你可以發佈該頁面的相關html(查看源代碼)? – 2011-05-01 22:21:34

+0

嗯..想法是:我只是想添加一個jQuery的事件監聽器到該窗體。因此,如果我嘗試在沒有從列表中選擇一個事件的情況下提交它,就會出現一個消息,而不是不提交表單......它可以是possbile嗎?謝謝! – dana 2011-05-02 08:05:54

+0

我想看到一些呈現的html輸出以及 – netbrain 2011-05-02 09:50:04

回答

29

添加submit監聽到窗體。提交時,請檢查是否選擇了某個元素,如果不是,則可以使用return false阻止提交。這裏有一個例子:

​​

而這裏的HTML:

<form id="myForm"> 
    <input type="text"/> 
    <input type="submit"/> 
</form> 

如果你不想使用jQuery,你也可以用普通的JavaScript處理提交事件,像這樣:

var myform = document.getElementById('myForm'); 
myform.addEventListener('submit', function() { console.log('Submitted!'); return false; }); 
+0

如果我添加最簡單的事件偵聽器的形式(只是爲了檢查它是否工作,我可以;噸設法得到它的工作...)代碼:我已經在表單中添加了一個id。 – dana 2011-05-02 08:03:30

+1

你有jQuery包括?這個答案使用了你沒有在你的問題中使用的jQuery。 – 2011-05-02 13:21:00

+0

我在我給的HTML上測試了我的代碼,它工作正常。你使用了你給我看的確切代碼嗎?另外,試着運行這個來看看你是否選擇了正確的形式:'console.log($('#addtobasket'));'。 – theabraham 2011-05-02 13:21:42