2012-12-28 26 views
1

我有下面的窗體(下面),它有一個隱藏的輸入標籤。在表單提交和響應返回時,我想要更改該隱藏輸入名稱的名稱,使其值爲「__REMOVE__」。然後再次提交表單的響應,我希望它回到「__ADD__」,依此類推。但是,該代碼不適用於我,名稱=「__ ADD__」永遠不會在表單上更改。我對jQuery非常陌生,所以請原諒我的無知。請注意,__BRONZE__的值永遠不會改變 - 後端PHP的名稱需要更改。改變輸入名稱attr的值:隱藏標籤不工作 - jQuery

表:

<form action="cart.php" method="post" class="cart-ajax"> 
    <input type="hidden" name="__ADD__" value="__BRONZE__" /> 
    <br><button type="submit" class="add-more-top dark cart-button-eight">Add to Cart</button> 
    <div class="cart-ajax-response"></div> 
</form> 

的jQuery:

$(document).ready(function() { 

// code here snipped out to keep this question short 

    // Shopping Cart Form 
    $("form.cart-ajax").submit(function(e) { 
      e.preventDefault(); 
      var form = $(this); 

      // update the submit buttons text on form submission 
      if(form.find('input:hidden').attr('name', '__ADD__')) 
      { 
        form.find('button:submit').html('Adding...'); 
      } 
      else if(form.find('input:hidden').attr('name', '__REMOVE__')) 
      { 
        form.find('button:submit').html('Removing...'); 
      } 

      $.post(form.attr('action'), form.serialize(), 
        function(data) { 

          // update the submit buttons text after successful response 
          // update the hidden form field with the opposite of the current value 
          if(form.find('input:hidden').attr('name') == '__ADD__') 
          { 
            form.find('button:submit').html('Remove'); 
            form.find('input:hidden').attr('name', '__REMOVE__'); 
          } 
          else if(form.find('input:hidden').attr('name') == '__REMOVE__') 
          { 
            form.find('button:submit').html('Add'); 
            form.find('input:hidden').attr('name', '__ADD__'); 
          } 

          // do something with the returned data - used in cart-ajax-response div 
          form.find('.cart-ajax-response').empty().html(data.aResults[0]); 

        }, 'json'); 
    }); 
}); // <-- document ready 

回答

4
if(form.find('input:hidden').attr('name', '__ADD__')) 

不是做你的想法。你實際上是設置該字段的名稱,而不是詢問它是否存在。

使用

if(form.find('input[name="__ADD__"]').length) 

,並注意.length讓你一個整數。沒有它,你會返回一個對象,它是真實的,即使它的長度爲0

然而,看看這個http://jsfiddle.net/3xTfX/2/ - 同樣的事情,更少的代碼

+0

或只使用:如果(form.find ('input:hidden')。attr('name')=='WHATEVER'){...} – Josep

+0

'form.find('input:hidden')。attr('name')'返回匹配的第一個元素。它會在給出的例子中工作,但另一個隱藏的字段可能會以這種形式添加,並且可能恰好在我們需要檢查的字段之前。事情會改變,所以我不會建議依靠易破的東西。 – Popnoodles

+1

同意,我只是想指出,他實際上可以使用jQuery「attr」函數來檢查屬性是否具有一定的價值,沒有別的。我喜歡你的回答和你的方法,但我只是認爲這對CocoaNoob知道這一點很好。 – Josep