2014-01-10 13 views
0

我正在嘗試JavaScript,但我是一個紅寶石的傢伙,真的很吸食javascript。我有一個字段形式(文本字段和提交按鈕),其中JavaScript只允許在字段中有文本時提交表單。但是,我將字段類型從文本字段切換到了select。現在,表單無法提交。我幾乎可以肯定的問題是我的JavaScript。這是我用文本字段包含該詞的代碼。我如何使它與選擇一起工作?當從文本字段切換到選擇時javascript停止工作

形式:

<form id="new_skill" class="new_skill" method="post" action="/skills" > 
    <li> 
     <input id="resume-field" class="field field288" type="text" 
      value="Type a speciality you want to add to your profile" 
      title="Type a speciality you want to add to your profile" 
      name="skill[label]"></input> 
    </li> 
    <li> 
     <input class="button button-add button-add-disabled" 
     type="submit" value="ADD +" name="commit"></input> 
    </li> 
</form> 

的Javascript:

(function($){ 
    $(document).on('focusin', '#resume-field', function() { 
     $(this).parents().find('.button-add-disabled').removeClass('button-add-disabled'); 
    }).on('focusout', '#resume-field', function(){ 
     if(this.value==' '||this.title==this.value) { 
      $(this).parents().find('.button-add').addClass('button-add-disabled'); 
     } else { 
      $(this).parents().find('.button-add').removeClass('button-add-disabled'); 
     } 

    });  

    $('.button-add-disabled').click(function(){ 
     return !$(this).hasClass('button-add-disabled'); 
    }); 
}(jQuery)); 

CSS:

.button-add { width: 49px; height: 28px; border: solid 1px #8c8c8c; display: block; 
    font-size: 11px; line-height: 28px ; color: #fff; text-align: center; 
    font-family: 'Ubuntu', sans-serif; transition: none; margin: 0 0 0 auto; 
    border-radius: 3px; } 
.button-add:hover { text-decoration: none; 
    -webkit-transition:none; 
     -moz-transition:none; 
     -ms-transition:none; 
     -o-transition:none; 
      transition:none; 
} 
.button-add-disabled { background: url(/assets/add-specialities-disabled.png) 
    repeat-x 0 0; box-shadow: 0 0 0 0; margin-left:35px; } 
.button-add-disabled:hover { background: url(/assets/add-specialities-disabled.png) 
    repeat-x 0 0; box-shadow: 0 0 0 0; } 

HTML中的下拉形式:

<select id="resume-field" name="skill[label]"> 
    <option value="1" title="option_1"></option> 
    <option value="2" title="option 2" selected="selected"></option> 
</select> 
+0

可能重複(HTTP:// stackove rflow.com/questions/21053295/jquery-click-function-not-being-called) –

+0

它不是重複的。當我用它來處理文本字段時,我領先於他。 – Philip7899

+0

您可以發佈SELECT的HTML嗎?如果將文本字段轉換爲SELECT,可能有很多原因導致它無法正常工作(例如,不是OPTION元素,ID不匹配等) –

回答

1

我做了一個簡單的例子(jsfiddle),做我認爲你所要求的,但不使用你的代碼。你可以適應它,如果它做你想要的。

HTML

<form> 
    <select id="selectme"> 
     <option value="">-- Please select one --</option> 
     <option value="1">1</option> 
     <option value="2">Two</option> 
     <option value="3">III</option> 
    </select> 
    <input type="submit" value="submit" id="clickme"> 
</form> 

JS

$(function(){ 
    $("#clickme").prop("disabled", true); 
    $("#selectme").change(function(){ 
     if ($("#selectme").val() != "") { 
      $("#clickme").removeAttr("disabled"); 
     } else { 
      $("#clickme").prop("disabled", true); 
     } 
    }); 
}) 

CSS

#clickme { 
    background-color: #f00; 
} 

#clickme:disabled { 
    background-color: #eee; 
} 
[jQuery的點擊功能不會被調用]的
+0

謝謝,你的答案几乎完美。至於如何提交,它的完美。唯一的問題是與按鈕添加和按鈕添加禁用相關的樣式/顏色現在不會發生。 – Philip7899

+0

我的意思是,當鏈接可點擊時,顏色應該改變,並且當它返回到不可點擊的狀態時。 – Philip7899

+0

現在顏色也在變化。稍微改變了選擇框的行爲,因爲在先前版本中,一旦選擇了實際值,就不可能選擇「空」值。 –

0

您聲明您已將輸入字段類型從文本切換爲選擇。因此,你需要添加此類型的HTML:

<select> 
    <option value="volvo">Volvo</option> 
    <option value="saab">Saab</option> 
    <option value="mercedes">Mercedes</option> 
    <option value="audi">Audi</option> 
</select> 
+1

我有點羞愧,承認我認識這段代碼,而且它是從w3schools複製的。 :) –

+0

那麼是什麼?它解釋... – Vickel

+0

是的,我只是開玩笑。那裏有很多[w3schools haters](http://www.w3fools.com/)。十年前,初學者還沒有其他很多好的參考資料,所以我從他們身上學到了很多東西(並且似乎忘了它的大部分)。 –

0

要開始,你的HTML是有點過:

<form id="new_skill" class="new_skill" method="post" action="/skills" > 
    <!-- needs a parent UL element --> 
    <li> 
     <input id="resume-field" class="field field288" type="text" 
      value="Type a speciality you want to add to your profile" 
      title="Type a speciality you want to add to your profile" 
      name="skill[label]"></input> 
      <!-- as a side not, input tags can be self-close (<input type="text" />) 
    </li> 
    <li> 
     <input class="button button-add button-add-disabled" 
     type="submit" value="ADD +" name="commit"></input> 
    </li> 
</form> 

如果你已經改變了你的輸入選擇元素,則需要選項元素,其中每個元素都可以具有「值」屬性,如下所示:

<select> 
    <option value="something">Something</option> 
</select> 

在您正在嘗試做的事情中,我不確定選擇元素是否符合您的需求,如果您想讓用戶在...中輸入內容...您可以預先填寫選擇元素與選項元素,每個元素對應於特定的「他們想要添加到他們的配置文件中的專業」。

0

更新和簡化的:

假設你沒有改變<input>元素<select><option></select>元素,你的代碼將正常工作,只有輕微的變化。

jsFiddle Demo

真的,你只需要跟蹤變化事件:

HTML:

<form id="new_skill" class="new_skill" method="post" action="/skills" > 
    <li> 
     Select a specialty to add to your profile:<br> 
     <select id="resume-field" name="skill[label]"> 
      <option value="default">Select a speciality:</option> 
      <option value="cod3r">Programming</option> 
      <option value="pizza">Pizza consumption</option> 
     </select> 
    </li> 
    <li> 
     <input class="button button-add button-add-disabled" 
     type="submit" value="ADD +" name="commit"></input> 
    </li> 
</form> 

使用Javascript/jQuery的:

$(document).on('change', '#resume-field', function() { 
    if(this.value=='default') { 
     $(this).parents().find('.button-add').addClass('button-add-disabled'); 
    } else { 
     $(this).parents().find('.button-add').removeClass('button-add-disabled'); 
    } 

});  

PS:當然,爲了讓jsFiddle工作,我還必須暫時從您的css中刪除url()等...

相關問題