将PHP变量传递给javascript/jquery进行错误检查


Pass PHP variable to javascript/jquery for error checking

看到了其他类似的例子,但我似乎仍然有问题。问题在于下面第三个错误检查器的脚本(#bid<#budm)。投标字段的金额不能低于#budm应该存储的设定预算的金额。使用php从与post-id相关的数据库中提取#budm的值。试图将该变量传递给js错误检查器,该检查器将存储php变量的隐藏输入字段(id="budm")与用户输入的输入字段(id="bid")进行比较。似乎是随机工作的。例如,在一篇$budgetmin值为400的帖子中,大多数低于400的条目都不被接受(这很好),但出于某种原因,值"9"是。

<?php
global $current_user;
get_currentuserinfo();
$cid = $current_user->ID;
$cwd = str_replace('wp-admin','',getcwd());
$post = get_post($pid);
$budgetmin = get_post_meta($pid, 'budget_start', true); ?>
<input type="hidden" id="budm" value="<?php echo $budgetmin; ?>">
<script type="text/javascript">
function check_submits()
{
if( jQuery("#days_done").val().length == 0 ) 
{
    alert("<?php _e('Error text3'); ?>");
    return false;   
}
if( jQuery("#bid").val().length == 0 ) 
{
    alert("<?php _e('Error text2'); ?>");
    return false;   
}
if (jQuery('#bid').val() < jQuery('#budm').val()) 
{
     alert("<?php _e('Error text'); ?>");
     return false;
}
return true;
}

</script>
<input type="text" name="bid" id="bid" class="bid_field" value="<?php echo     $bid; ?>" size="10" /> 
<input class="green_btn grey" style="font-size: 20px; padding-left: 15px; padding-right: 15px; font-weight: 400;" id="submits_crt" type="submit" name="bid_now_reverse" value="<?php echo "Submit"; ?>" />

非常感谢您的帮助!

问题是.val()返回的是字符串,而不是数字。测试将这两个值作为字符串进行比较,这不是您想要的,也不是您期望的行为。

在测试工作之前,您需要将您的值强制转换为数字。如果你知道它们总是整数,你可以使用:

var bid=parseInt(jQuery('#bid').val()),
    budm=parseInt(jQuery('#budm').val());
if (bid < budm) {
    alert("Bid is lower than budget");
}

如果输入可以是浮点值,则可以使用parseFloat()。

这里有一个jsFiddle展示了它的工作原理。