2013-07-02 36 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>