为什么JavaScript CSS类会破坏这个脚本?

3
这是脚本内容 -
<script language=javascript>
function apply()
{
  document.form1.sub.disabled=true;
  if(document.form1.chk.checked==true)
  {
    document.form1.sub.disabled=false;
  }
  if(document.form1.chk.checked==false)
  {
    document.form1.sub.enabled=false;
  }
}
</script> 

如果我使用这个HTML,它就无法正常工作--

<input class="field checkbox" type="checkbox" name="chk" onClick="apply()" value="accept" />

然而,这也行不通--

<input class="field" type="checkbox" name="chk" onClick="apply()" value="accept" />

但这确实有效--
<input class="checkbox" type="checkbox" name="chk" onClick="apply()" value="accept" />

如果"class = field"的类存在,它会破坏JS。当然,我可以将其删除,但我想知道为什么它不起作用?
谢谢!
编辑 对不起,这是整个页面。CSS只控制元素的位置,据我所知,它不应该干扰JS...? -
<?php
session_start();
if(!isset($_SESSION['referrer'])){
    //get the referrer
    if ($_SERVER['HTTP_REFERER']){
        $referrer = $_SERVER['HTTP_REFERER'];
    } else {
        $referrer = "unknown";
}
//save it in a session
$_SESSION[’referrer’] = $referrer; // store session data
}

//grab campaign var from url
$campaign = $_GET['campaign'];

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head>

<title>Beerfest Packages Sweepstakes - Blue Ridge Country</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript" src="scripts/wufoo.js"></script>
<link rel="stylesheet" href="css/structure.css" type="text/css" />
<link rel="stylesheet" href="css/form.css" type="text/css" />
<link rel="stylesheet" href="css/theme.css" type="text/css" />
<script language=javascript>
function apply()
{
  document.form1.sub.disabled=true;
  if(document.form1.chk.checked==true)
  {
    document.form1.sub.disabled=false;
  }
  if(document.form1.chk.checked==false)
  {
    document.form1.sub.enabled=false;
  }
}
</script>  
</head>

<body id="public">

<img id="top" src="images/top.png" alt="" />
<div id="container">

<h1><a href="">Wufoo</a></h1>

<form class="wufoo" action="insert.php" method="post" name="form1">

    <div class="info">
        <h2>Register to Win &amp; Subscribe to Blue Ridge Country</h2>
        <div>Now's your chance to not only register to win our free beerfest tickets and getaway, but also receive the #1 magazine in the Blue Ridge Mountains!</div>
    </div>

    <ul>

    <li class="section first">
        <h3>Your information</h3>
        <div>Whether you're registering to win or subscribing to the magazine (or both!) we need your info!</div>
    </li>

    <li>
    <label class="desc">Name <span class="req">*</span></label>
        <span>
        <input class="field text" size="8" value=""/>
        <label>First</label>
        </span>

        <span>
        <input class="field text" size="3" value=""/>
        <label>M.I.</label>
        </span>

        <span>
        <input class="field text" size="14" value=""/>
        <label>Last</label>
        </span>
    </li>
    <li>
    <label class="desc">Email <span class="req">*</span></label>
        <div>
        <input class="field text medium" type="text" name="email" maxlength="100" value="" /> 
        </div>
        <p class="instruct">Don't worry, we won't spam you, share or sell your email address!</p>
    </li>    
    <li>
    <label class="desc">Address <span class="req">*</span></label>
        <div>
        <input class="field text medium" type="text" maxlength="100" value="" /> 
        </div>
    </li>
    <li>
        <span>
        <input class="field text" size="15" value="" />
        <label>City</label>
        </span>

        <span>
        <input class="field text" size="2" value="" />
        <label>State</label>
        </span>

        <span>
        <input class="field text" size="5" maxlength="10" value="" />
        <label>Zip</label>
        </span>
    </li>

    <li>
    <label class="desc">Phone <span class="req">*</span></label>
        <span>
        <input class="field text" type="text" size="3" maxlength="3" value=""/> - 
        <label>Area</label>
        </span>

        <span>
        <input class="field text" type="text" size="8" maxlength="8" value=""/>
        <label>Phone</label>
        </span>
    </li>    

    <li class="section">
        <h3>Legal mumbo jumbo</h3>
        <div>Don't worry, you're almost done and this is the last bit we need from you!</div>
    </li>

    <li>
    <label class="desc">Official Rules <span class="req">*</span></label>
        <div>
        <textarea rows="10" cols="50" class="field textarea medium" readonly="readonly" style="font-size: 0.8em;">1. To enter, complete an online request by submitting this completed form. Or, send a stamped, self-addressed envelope to: "Blue Ridge Country Beerfest Promotion," Leisure Publishing, PO Box 21535, Roanoke, VA 24018, requesting an entry form. Limited to one entry per household. Entries must be received by June 30, 2009. 2. Reservation procedures to come with notification of winning. Package not available during holidays and special events. Notification of prizes will be sent to winners at the email address on the entry form. The odds of winning will depend upon the number of entries. 3. All prizes will be awarded to winners selected by random drawing from all valid entries received. Drawing will be conducted by Leisure Publishing Inc., an independent publisher, whose decisions are final on all matters relating to this sweepstakes. Winners will be notified by email to the address provided on the entry form. Only one prize to a family or household. Due to the nature of this competition, you must be 21 or older to win. Proof of age will be required prior to receiving free tickets to alcohol-related events. 4. Sweepstakes is open to all residents of the U.S. and Canada except advertisers, their employees, their advertising and promotion agencies, and the families of each. Void wherever taxed, restricted or prohibited by law. Prizes are not transferable; may not be exchanged or substituted; cannot be redeemed for cash; must be taken in their entirety; no substitutions permitted. Taxes, if any, are the responsibility of the individual winners. 5. Entry in sweepstakes constitutes permission to use winnersnames and photograph for advertising and publicity purposes, without further compensation to winners. For names of prize winners, send a stamped, self-addressed envelope to: "Blue Ridge Country Beerfest Promotion" — Winners, P.O. Box 21535, Roanoke, VA 24018.</textarea>
        </div>
    </li>

    <li class="section">
        <h3>Subscribe / Win!</h3>
        <div>While you don't have to subscribe to win, we hope you will!</div>
    </li>

    <li>
    <label class="desc">Sweepstakes Selection</label>
        <div class="col">
        <span><input id="choice1" name="mc" class="field radio" type="radio" value="Robots" checked="checked" />
        <label class="choice" for="choice1">Robots</label></span>

        <span><input id="choice2" name="mc" class="field radio" type="radio" value="Monkeys"/>
        <label class="choice" for="choice2">Monkeys</label></span>
        </div>
    </li>

    <li>
    <label class="desc">Official Rules</label>
        <div class="col">
        <span><input class="checkbox" type="checkbox" name="chk" onClick="apply()" value="accept" />
        <label class="choice">I accept the terms and conditions from the "Official Rules" above.</label></span>
        </div>
    </li>    

    <li class="buttons">
        <input id="saveForm" class="btTxt" type="submit" name="sub" value="Submit" disabled="disabled" />
    </li>
    </ul>

    <div style="display: none;">
        <input type="hidden" name="referrer" value="<?php echo $referrer; ?>" />
        <input type="hidden" name="campaignID" value="<?php echo $campaign; ?>" />
    </div>

</form>

</div>

1
所有三个版本的HTML在我的FF3上都可以工作。需要更多信息-您使用哪个浏览器?CSS是什么?您的页面的其余部分是什么样的? - Dan Lew
2
你的函数意义非常微弱 - enabled 是你的扩展吗?如果不是,我建议重构一下。 - annakata
@annakata...我的问题也一样。@Marty,你能再发一些吗?根据你发布的内容,类名不应该改变任何东西,甚至没有被引用。需要更多的明确性。 - Ian Elliott
刚刚发布了整个页面,谢谢! - Marty
好的,请尝试移除 Woofoo 脚本。 - annakata
显示剩余4条评论
1个回答

3

在等待您的编辑之前,我几乎可以保证问题出现在页面上其他 JavaScript 代码中,该代码将状态更改为您认为不同的内容。我无法看出这与 CSS 有任何关系。建议您使用 Firebug 检查 DOM 并执行方法。

另外,我建议您重写该函数:

function apply()
{
  with(document.form1) { sub.disabled = !chk.checked; }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接