2013-07-02 33 views
1

我想了解範圍就輸入和點擊或檢查而言。我正在研究一個項目,我正在嘗試做的是。詢問他們是否做了很多,他們會回答是或否。那麼我會以任何方式問他們3個問題。我會問他們可以有多少板凳,他們可以蹲下多少,他們可以捲曲多少。我設置了這個部分,我會根據他們輸入的內容向他們提供反饋。我試圖做的是添加一個複選框,讓他們選擇他們是男性還是女性。我想我應該這樣做這樣的事情是這樣的瞭解點擊(),更改()和輸入範圍

function one() { 
    a = 100; 
    b = 200; 
    c = 300; 
    return two(); 

    function two() { 
     a += a; 
     b += b; 
     c += c; 
     return three(); 

     function three() { 
      a += 1; 
      b += 1; 
      c += 1; 
      return four(); 

      function four() { 
       console.log(a, b, c); 
      } 
     } 
    } 
} 
one() 

我想我的問題是我將如何做點擊和檢查和輸入。看起來無論我在哪裏添加複選框,我都會因爲某些原因而無法工作。第一個問題會出現問題......您是否研究了很多?這個問題不會存在。或者我會得到一個後期時代。我下面有一個小提琴。如果有人會告訴我如何使它工作...或者甚至更好地讓我看到它的工作,我會非常感激。我認爲這會幫助很多人。我在這裏看到了很多關於這個問題的很好的答案,但沒有工作的例子。我認爲對某些人來說最有幫助的事情就是他們可以看到的一個工作示例,我知道這是爲我準備的。

ps在我的小提琴中,我回收了相同的輸入問題。無論他們是否工作,我都希望做到這一點,但不是我的主要問題。

http://jsfiddle.net/vicky1212/G24aQ/10/

+0

這是很難幫助時,我們有很多的假設。如果您可以更改問題並指出您正在嘗試解決的具體問題 –

+0

準確理解什麼,如何向特定控件(按鈕,選擇等)添加(綁定,操作) ??我們可以幫助你,如果你問清楚你想要什麼... – ncubica

+0

我把設置和我想在這個小提琴中做什麼http://jsfiddle.net/vicky1212/MVCGS/ – user2537145

回答

1

我加入的代碼一些解釋..

$('.myOptions').change(function() { 
    // Remove the active class 
    $('.list').removeClass('active'); 
    // Add the active class 
    // this.value holds the current value that is selected 
    // No need to use filter 
    $('.' + this.value).addClass('active'); 
}); 

$('#butt').click(function() { 
    // Better to have Lesser variables , 
    var active = $('.list.active'), 
     $boxOne = active.find('.box1'), 
     $boxTwo = active.find('.box2'), 
     $boxThree = active.find('.box3'), 
     $output = $('#output'), 
     total = (parseInt($boxOne.val(), 10) + parseInt($boxTwo.val(), 10) + parseInt($boxThree.val(), 10)), 
     msg = ''; 

    $output.addClass('error'); 
    var dropdownValue = $('.myOptions').val(), 
     // you need to select the inputs specifically 
     // you were trying to access it using $('input') that gives the list of all the inputs 
     // on your page.. So you need to be more specific 
     $genderRadio = $('input[name=gender]'); 
    // If dropdown is empty show some message 
    if (dropdownValue === '') { 
     msg = 'Please select an option....'; 
    } else if (isNaN(total)) { 
     msg = 'Input three numbers, please...'; 
    } // If gender is not selected show a specific message 
    else if ($genderRadio.filter(':checked').length === 0) { 
     msg = 'Please select your gender....'; 
    } else { 
     // If it comes to this statemenet it means there is no error 
     // remove the error class 
     $output.removeClass('error'); 
     if (total < 14) { 
      msg = "That's bad, should be higher..."; 
     } else if (total > 15) { 
      msg = "That's bad, should be lower..."; 
     } else { 
      msg = "You got it... Nice work."; 
     } 

     var genderPrefix = $genderRadio.filter(':checked').val() === 'Male' ? 'Sir..' : 'Miss..'; 
     msg = genderPrefix + msg; 
    } 

    $output.text(msg); 
}); 

Check Fiddle

0

我舉一個小介紹javascript模式與我的榜樣。你可以在http://addyosmani.com/resources/essentialjsdesignpatterns/book/中閱讀關於它們的信息並不是一件容易的事情,但是當你準備好時,你會明白如何組織你的JavaScript代碼。

同時我也建議你閱讀有關如何在http://net.tutsplus.com/tutorials/html-css-techniques/20-html-forms-best-practices-for-beginners/

好身邊代碼的良好做法的形式,這裏是有關如何使用點擊工作,並形成工作實例http://jsfiddle.net/ncubica/BQaYz/

HTML

<label><input type="Radio" name="gender" id="male" value="male" /> male</label> 
<label><input type="Radio" name="gender" id="female" value="female" />female</label> 
<input type="text" id="name" placeholder="name" /> 
<input type="text" id="lastname" placeholder="lastname" /> 
<input type="button" id="submit" value="store" /> 

的JavaScript

var survey = (function(_module){ 
    var modulename = _module; 
    var user = {}; 
    /*private methods*/ 

    function init(){ 
     observers(); 
    } 

    function observers(){ 
     $(document).on("click","#submit", survey.store) 
    } 

    /*public methods*/ 
    $r = {} 

    $r.store = function(){ 
     user.name = $("#name").val(); 
     user.lastname = $("#lastname").val(); 
     user.gender = $("input:radio[name=gender]:checked").val(); 
     survey.toString(); 
    } 

    $r.toString = function(){ 
     var genderStr = (user.gender == "male") ? "Man" : "Girl"; 
     alert(user.name + " " + user.lastname + " is " + genderStr); 
    } 

    $r.init = function(){ 
     init(); 
    } 

    return $r; 
})("survey") 

survey.init(); 

好吧,我知道起初看起來有點「大」的代碼,但很簡單,在JavaScript中,變量可以從函數到普通字符串採取任何形式。

這裏我們正在用anonymous functions來創建一個模塊,這將有助於我們的工作更加清晰和結構化,這個變量將有2種方法和變量,公共和私有。

爲了讓我們公開,我們必須在完成運行代碼後返回對象中的方法,這就是爲什麼存在$r變量,它是一個按屬性具有函數的對象,並且在代碼結束時現在,您可以輕鬆地導航投擲方法並捕獲點擊,變化等事件,然後使用此模式返回return $r ....

您只需將此事件添加到方法observers創建一個私人或公共功能,在事件結束後您將完成激活。

閱讀代碼,如果您有任何進一步的問題,你可以問我任何問題。我試圖解決你的問題,並構建你的代碼。

最好的好運

+0

@Sushanth正是我所問的! &nahum非常感謝你。開始認爲從來沒有人用過複選框並一起下來問幾個問題哈哈。但是,我真的很認真地看到這裏有很多很好的信息,但這並不是一個有效的例子,它總是一切都是自我的,我認爲這對新人來說是一個有用的例子......他們可以添加去或從中取。 – user2537145

+0

@ user237145如果這項工作適合您,我們只會要求您提供我們的答案,我們標記爲正確的答案。請花時間做這件事。我很高興這個例子可以幫助你... – ncubica

+0

希望我可以同時投票,當我得到一些點,我會回來這個問題做到這一點! – user2537145

0

[Here is below answer as a jsFiddle]

這個答案的目的是作爲首發出場。我試圖在初學者級別編寫它,以便您可以自定義它。希望這個簡單的例子能給你一個開始的地方。我用一個培訓健身房的例子來詢問他們的用戶的一些基本問題。

我的方法是創建一個空的DIV,名爲#ques,其中將顯示所有問題和輸出,以及包含隱藏字段的隱藏<form>將存儲響應。

我創建了一個計數器,cnt,它在每個問題後遞增。

有一個稱爲ask_next_ques()的函數,其參數爲cnt。根據我們在調查中的位置,它會詢問下一個問題(例如,當cnt == 3它提出第三個問題時)。

不幸的是,JavaScript堅持所有的字符串都在一行上。因此,我建立這樣的HTML:

var qq = ' 
    <ul style="list-style:none"> 
     <li> 
      What can you curl?<br /> 
      <input type="text" id="curl"> Kg 
     </li> 
     <li> 
      What can you bench?<br /> 
      <input type="text" id="bench"> Kg 
     </li> 
     <li> 
      What can you lift?<br /> 
      <input type="text" id="lift"> Kg 
      <input type="button" id="cbl_btn" value="Go"> 
     </li> 
    </ul> 
'; 

,然後重新安排它到一條線,像這樣:

var qq = '<ul style="list-style:none"><li>What can you curl?<br /><input type="text" id="curl"> Kg</li><li>What can you bench?<br /><input type="text" id="bench"> Kg</li><li>What can you lift?<br /><input type="text" id="lift"> Kg<input type="button" id="cbl_btn" value="Go"></li></ul>'; 

更難以讀取的方式,但這是JavaScript的是如何想的事情。

隨着每個問題的回答,答案都會被javascript/jQuery讀取,然後保存到<form>結構中的隱藏字段中。

當所有問題都被要求時,您可以將表單發佈到另一個(PHP?)文件進行處理(存儲在MySQL數據庫中?),或者將答案通過電子郵件發送給您自己,或者將其重新顯示給用戶,或...我選擇在燈箱中顯示答案。

這裏是所有的代碼。只需將其複製/粘貼到單個HTML或PHP文件中,然後運行即可。

SURVEY.PHP

<html> 
    <head> 
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script> 

     <link rel="stylesheet" href="http://code.jquery.com/ui/1.9.1/themes/base/jquery-ui.css" /><!--Lightbox--> 
     <script src="//ajax.googleapis.com/ajax/libs/jqueryui/1.9.1/jquery-ui.min.js"></script><!--Lightbox--> 

     <style> 
     </style> 

     <script type="text/javascript"> 

      //Declare vars outside document.ready() so they can be accessed globally 
      var ctr = 1; 
      var mf = ''; 
      var pl = ''; 

      $(document).ready(function() { 

       ask_next_ques(ctr); 

       /* ------------------------------------------------------------ */ 
       $("input:radio[name=gender]").click(function() { 
        //Note: var mf must be initialized above (outside document.ready()) so can be used in below fn ask_next_ques() 
        mf = $('input:radio[name=gender]:checked').val(); 
        $('#hgender').val(mf); 
        ctr++; 
        ask_next_ques(ctr); 
       }); 
       /* ------------------------------------------------------------ */ 
       $(document).on('click', "#cbl_btn", function() { 
        var cc = $("#curl").val(); 
        var bb = $("#bench").val(); 
        var ll = $("#lift").val(); 

        //alert('Value of cc: ' +cc+ ' Value of bb: ' +bb+ '  Value of ll: ' + ll); 

        //Check if any one of these fields left empty 
        if (cc.length<1 || bb.length<1 || ll.length<1) { 
         alert("Please complete all fields"); 
        }else{ 
         $('#hcurl').val(cc); 
         $('#hbench').val(bb); 
         $('#hlift').val(ll); 
         ctr++; 
         ask_next_ques(ctr); 
        } 
       });    
       /* ------------------------------------------------------------ */ 
       $(document).on('click', "input:radio[name=plan]", function() { 
        //Note: var pl must be initialized above so can be used in below fn ask_next_ques() 
        pl = $('input:radio[name=plan]:checked').val(); 
        $('#hplan').val(pl); 
        ctr++; 
        ask_next_ques(ctr); 
       }); 
       /* ------------------------------------------------------------ */ 

      }); //END $(document).ready() 

      function ask_next_ques(ctr) { 
       if (ctr==1) { 
        var qq = 'Male: <input value="Male" type="radio" name="gender"><br />Female: <input value="Female" type="radio" name="gender">'; 
        $('#ques').html(qq); 
       }else if (ctr==2){ 
        var qq = '<ul style="list-style:none"><li>What can you curl?<br /><input type="text" id="curl"> Kg</li><li>What can you bench?<br /><input type="text" id="bench"> Kg</li><li>What can you lift?<br /><input type="text" id="lift"> Kg<input type="button" id="cbl_btn" value="Go"></li></ul>'; 
        $('#ques').html(qq); 
       }else if (ctr==3){ 
        var qq = 'Are you an:<br />Owner: <input value="Owner" type="radio" name="plan"><br />Member: <input value="Member" type="radio" name="plan">'; 
        $('#ques').html(qq); 
       }else if (ctr==4){ 
        //All questions have been asked; All responses saved into hidden fields 
        //Can now read all hidden fields and do an AJAX POST into the database, or 
        //Or can simply POST the form to another page for processing. 
        alert("All questions have been asked"); 

        var hg = $('#hgender').val(); 
        var hc = $('#hcurl').val(); 
        var hb = $('#hbench').val(); 
        var hl = $('#hlift').val(); 
        var hp = $('#hplan').val(); 
        qq = 'The values saved into all hidden fields are:<br />Gender: ['+hg+ ']<br />Curl: [' +hc+ ']<br />Bench: [' +hb+ ']<br />Lift: [' +hl+ ']<br />Plan: [' +hp+ ']<br />You can now send these values to a<br />database, or email them to yourself.'; 
        $('#ques').html(qq); 

        //We could just leave it here, but to be interesting we'll display the results in a lightbox 
        //To remove all lightbox stuff, just delete the next 8 lines and delete the two lightbox references in the header (for jquery-ui) 
        $('#ques').dialog({ 
         autoOpen:true, 
         width: 450, 
         title: "Hidden Field Valuess:", 
         close: function() { 
          alert('Thank you for taking our survey'); 
         } 
        }); 
       } 
      } 
     </script> 
    </head> 
<body> 


    <div id="ques"></div> 
    <div id="hidden_form"> 
     <form method="POST"> 
      <input type="hidden" id="hgender" name="gender"> 
      <input type="hidden" id="hcurl" name="curl"> 
      <input type="hidden" id="hbench" name="bench"> 
      <input type="hidden" id="hlift" name="lift"> 
      <input type="hidden" id="hplan" name="owner"> 
     </form> 
    </div> 

</body> 
</html>