【问题标题】:javascript stops working when switching from text field to select从文本字段切换到选择时,javascript停止工作
【发布时间】:2014-01-10 20:09:56
【问题描述】:

我正在尝试使用 javascript,但我是一个 ruby​​ 人,并且真的很讨厌 javascript。我有一个单字段表单(文本字段和提交按钮),其中 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>

【问题讨论】:

  • 不是重复的。我领先于他,因为我可以使用文本字段。
  • 你能发布 SELECT 的 HTML 吗?如果您将文本字段转换为 SELECT,可能有很多原因导致它不起作用(例如,不是 OPTION 元素、不匹配的 ID 等)
  • @Philip7899 如果不是重复的,那么它至少是SSCCE 的一个很好的例子。 :) JSFiddle 也不错!
  • Surendran,我试过你的 jsfiddle,它总是提交。我想做的是拥有它,因此如果用户尚未选择任何内容,则无法提交。如果用户有,则可以提交。

标签: javascript jquery css forms dom


【解决方案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;
}

【讨论】:

  • 谢谢,您的回答几乎完全有帮助。至于它如何提交,它是完美的。唯一的问题是与 button-add 和 button-add-disabled 关联的样式/颜色现在不会发生。
  • 我的意思是,当链接可点击和返回不可点击时,颜色应该改变。
  • 现在颜色也在变化。稍微改变了选择框的行为,因为在以前的版本中,一旦选择了实际值,就无法选择“空”值。
【解决方案2】:

您声明您已将输入字段类型从文本切换为选择。因此你需要添加这种html:

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

【讨论】:

  • 我有点惭愧地承认我认识这段代码,并且它是从 w3schools 复制的。 :)
  • 是的,我只是在开玩笑。那里有很多w3schools haters。十年前,对于初学者来说,其他好的参考资料并不多,所以我从他们那里学到了很多东西(似乎大部分都忘记了)。
【解决方案3】:

首先,您的 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>

如果您已将 input 更改为 select 元素,那么您需要 option 元素,其中每个元素都可以有一个“值” "属性,如下:

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

在您尝试执行的操作的上下文中,如果您希望用户输入某些内容,我不确定 select 元素是否符合您的需求...您可以预先- 用 option 元素填充 select 元素,每个元素对应于特定的“他们想要添加到他们的个人资料中的专业”。

【讨论】:

    【解决方案4】:

    更新和简化:

    假设您确实将 &lt;input&gt; 元素更改为 &lt;select&gt;&lt;option&gt;&lt;/select&gt; 元素,您的代码只需进行少量更改即可正常工作。

    jsFiddle Demo

    真的,您只需要跟踪 change 事件:

    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() 等...

    【讨论】:

      猜你喜欢
      • 2018-01-14
      • 1970-01-01
      • 2019-03-17
      • 1970-01-01
      • 1970-01-01
      • 2015-03-15
      • 2019-04-29
      • 2010-12-17
      • 1970-01-01
      相关资源
      最近更新 更多