2014-07-18 1 views
2

선택이 이루어질 때까지 제출 버튼을 숨기는 양식이 있습니다. 선택 항목이 유효하지 않은 경우 (예 : 재고가 없거나 제품을 사용할 수없는 경우) 제출 버튼이 표시되지 않습니다.'입력'을 눌러 양식 완성을 비활성화하십시오.

HTML/PHP :

<select id="choice" name="conc" required="required" onChange="appearButton();"> 
    <option selected="selected" value="" disabled="disabled">select an option</option> 
    <option value="0">choice</option> 
</select> 
Qty: <input type="text" size="2" maxlength="2" value="1" name="qty" required="required"/><br/> 
<span id="availability">Select Option to see Stock Availability</span><br/> <?php 
//SQL related to checking if stock is avail. or not would go here 
if ($checkstock->rowCount() == 0) { 
    echo "This item is currently unavailable."; 
} else { 
    echo '<span id="cartbutton"></span>'; 
} ?> 

JS :

function appearButton() { 
    if (($("#availability").text() != "Out of Stock") 
    && ($("#availability").text() != "Select Options to see Stock Availability")) { 
     $("#cartbutton").html('<input type="submit" value="Add to Cart"/>'); 
    } else { 
     $("#cartbutton").text(""); 
    } 
} 

#availability 변경 #choice 드롭 선택에 따라서는 JSON 객체의 값을 잡는다.

내 선택은 입력 한 내용이 유효하지 않은 경우 제출 버튼이 존재하지 않지만 qty 입력란에 들어가서 제출 버튼이 없어도 제출한다는 것입니다.

특정 인스턴스에서 반환 될 때 양식 제출을 사용하지 않도록 설정하는 가장 좋은 방법은 무엇입니까? 항목이 유효한 경우 입력시 제출 양식을 작성하고 싶지 않지만 사용할 수없는 옵션을 원합니다.

+0

난 항상 (봇) 모두 폼 요소를 제거하는 모든'매핑 할'id's을 할당하고, 속성 name'은' id는'ajax를 통한 제출을 위해 다른'name's에 있습니다. 그런 다음 제출을 위해'type = "button"'버튼을 사용합니다. –

+0

왜 사용자가 잘못된 옵션을 선택하도록 허용합니까 (폼에 잘못된 값을 가진 옵션을 넣지 마십시오)? 양식이 제출 될 때가 아니라 이전에 양식이 제출 될 때 유효성 확인이 이루어져야합니다. – RobG

+0

@RobG, 나는 불필요한 코드를 생략했다. 그러나 요지는 두 가지 드롭 다운이 있으며 주어진 조합은 주식 수준과 관련이있다. 특정 옵션과 관련된 모든 순열이 재고가 없기 때문에 양식 옵션을 사용 중지 할 수 없습니다. 주어진 조합의 모든 재고 수준을 가진 JSON 객체를 폴링합니다. 일부는 재고가 없거나 없을 수도 있습니다 (따라서 제출 버튼은 숨김). – gator

답변

3

visible/invisible에서 enabled/disabled로 변경하는 것이 좋습니다. 물론 UX이 아닙니다.

<form>의 경우 보길 원하는 내용은 onsubmit입니다.

예 : 나는 그냥 같은 논리를 복사하여 양식이 제출해서는 안 경우는 false를 돌려 만든

function checkState() { 
    if (($("#availability").text() == "Out of Stock") || ($("#availability").text() == "Select Options to see Stock Availability")) 
     return false; 
    return true; 
} 

: 자바 스크립트 함수를 포함 할 것

<form onsubmit="checkState()" ...other attributes...> 
    ...form elements... 
</form> 

합니다. 그런 다음 checkState에서 실행 (DRY)를 당신의 appearButton를 다시 작성할 수 있습니다 : 제거,

function appearButton() { 
    if (!checkState()) 
     $("#cartbutton").html('<input type="submit" value="Add to Cart"/>'); 
    else 
     $("#cartbutton").text(""); 
} 
관련 문제