数字在条件范围内的条件 - Titanium / Javascript

时间:2013-11-03 20:25:29

标签: javascript titanium appcelerator

我正在使用Javascript在Titanium中开发应用程序并尝试实现以下检查逻辑:
用户输入了1到200之间的一个值,然后他/她应该输入介于1和第一个值之间的第二个值(小于或等于,但不超过第一个值)。

这是我的代码:

var value_alert = '';  //First value
var value_remind = ''; //Second value (should be less or equal)

var default_value_alert = 10; //Default first value for TextField
var default_value_remind = 5; //Default second value for TextField

// handle and save the first value entered by user
function doOpenAlert(){ 

     var input_text = Ti.UI.createTextField({
        keyboardType: Ti.UI.KEYBOARD_PHONE_PAD
    });

    if(value_alert === ''){
        input_text.value = default_value_alert;       

    } else {
        input_text.value = value_alert;  
    }

    var dialog = Ti.UI.createOptionDialog({
       title : "Specified distance in the range 1-200 km",
       androidView : input_text,
       buttonNames : ['Ok', 'Cancel'] 
    });
    dialog.show();    
    dialog.addEventListener('click', function(e){

        if(value_remind === ''){
            value_remind = default_value_remind;       
        } 

        if(e.index == 0){  // Check is Ok pressed
            // check_number = isInt(input_text.value);

            if(input_text.value >= 1 && input_text.value <= 200){ // Check that the first value is in range
                var toast = Titanium.UI.createNotification({
                    duration: 2000,
                    message: "Distance is " + input_text.value + " km."
                });
                toast.show();
                value_alert = input_text.value; // Saving the first value entered by user
            } else if(input_text.value == 0){
                alert("The field is empty.");
            } else if(!(input_text.value >= 1 && input_text.value <= 200)){
                alert("Range is between 1 and 200 km.");
            } 
        }
    });
}

// handle and save the second value entered by user 
function doOpenMinne(){

    var input_text = Ti.UI.createTextField({
        keyboardType: Ti.UI.KEYBOARD_PHONE_PAD  
    });

    if(value_remind === ''){
        input_text.value = default_value_remind;
    } else {
        input_text.value = value_remind;
    }

    var dialog = Ti.UI.createOptionDialog({
       title : "Remind before number", 
       androidView : input_text,
       buttonNames : ['Ok', 'Cancel'] 
    });
    dialog.show();
    dialog.addEventListener('click', function(e){

        if(value_alert === ''){
            value_alert = default_value_alert;       
        } 

        if(e.index == 0){
            // check_number = isInt(input_text.value);
            if(input_text.value >= 1 && input_text.value <= value_alert){ // Check if the second value in is range between 1 and the first value
                 var toast = Titanium.UI.createNotification({
                    duration: 2000,
                    message: "Remind at " + input_text.value + " km."
                });
                toast.show();
                value_remind = input_text.value; // Saving the second value entered by user
            } else if(input_text.value == 0){
                alert("The field is empty");
            } else if(!(input_text.value >= 1 && input_text.value <= 200)){
                alert("The range is between 1 and 200 km");
            }
        }   
    });
}

例如,它在以下组合中运作良好:
1) 第一个值 - 10; 第二个值 - 5;

2) 第一个值 - 105; 第二个值 - 101;

最重要的是,如果第一个值是&gt; = 100,那么第二个值是&lt; 100 - 不起作用

似乎条件是正确的,但工作不正确 - 找不到错误。

1 个答案:

答案 0 :(得分:1)

我认为您遇到的问题是您将值比较为字符串而不是数字。比较两个字符串Javascript bases the comparison on the Unicode values of the characters in order时。这对你意味着什么?简短的回答是,虽然"90" < 200true,因为该比较导致"90"被强制转为90"90" < "200"false,因为"9"大于"2"

为了避免此行为,您需要将一个或两个变量转换为数字。 This answer on converting strings into numbers显示了许多方法可以帮助您实现这一目标,但在您的情况下,我认为parseInt(input_text.value, 10) <= parseInt(value_alert, 10)可以正常使用。