Ошибка JavaScript: выбор не определен. Происходит только при запуске в публичном выводе плагина Mura - PullRequest
0 голосов
/ 17 февраля 2012

Я работаю над созданием общедоступной части плагина и получаю ошибку javascript, которая не возникает, когда я запускаю тот же код за пределами Mura или когда я запускаю его на jsfiddle.

JavaScript довольно прост. Он заполняет форму выбора на основе значения другого выбора. Вот jsfiddle html и javascript, который работает сам по себе. http://jsfiddle.net/P7ZTz/2/

В моем публичном представлении плагина у меня есть следующее.

<cfset rc.$.loadJSLib() />
<cfset rc.pc.addToHTMLHeadQueue("addendaJsInclude.cfm")>

<form name="form" method="post" action="addenda2.cfm" onSubmit="return checkrequired(this)">
<select name="mRoute" onchange="javascript:populateData(this.options[selectedIndex].text)">
    <option value="">Select Route</option>
    <option value="Route 3">Route 3</option>
    <option value="Route 2">Route 2</option>
    <option value="Route 1">Route 1</option>
</select>    

<select name="mSection">
    <option value="">Section</option>
</select>

<input type="submit" name="submit">
</form>

Мой файл addendaJsInclude.cfm содержит следующее:

var arrayData = new Array();
arrayData[0] = 'Route 1|1|'
arrayData[1] = 'Route 1|2|'
arrayData[2] = 'Route 1|3|'
arrayData[3] = 'Route 1|4|'
arrayData[4] = 'Route 1|5|'
arrayData[5] = 'Route 1|6|'
arrayData[6] = 'Route 1|7|'
arrayData[7] = 'Route 2|1|'
arrayData[8] = 'Route 3|1|'

function populateData( name ) { 
    select = window.document.form.mSection; 
    string = ""; 
    count = 1; 
    select.options.length = count; 
    for( i = 0; i < arrayData.length; i++ ) { 
        string = arrayData[i].split( "|" ); 

        if( string[0] == name ) { 
            select.options[count++] = new Option( string[1] ); 
        } 
    } 
}

function checkrequired(which) {
    var pass=true;
    if (document.images) {
        for (i=0;i<which.length;i++) {
            var tempobj=which.elements[i];
            if (tempobj.name.substring(0,1)=="m") {
                if (((tempobj.type=="text"||tempobj.type=="textarea")&&
                tempobj.value=='')||(tempobj.type.toString().charAt(0)=="s"&&
                tempobj.selectedIndex==0)) {
                    pass=false;
                    break;
                }
              }
        }
    }
    if (!pass) {
        shortFieldName=tempobj.name.substring(1,12).toUpperCase();
        alert("Please select a "+shortFieldName+".");
        return false;
    }
    else
    return true;
}

Когда я запускаю страницу в своем браузере, я получаю следующую ошибку в моей консоли:

select is undefined

select.options.length = count;

Кажется, это какая-то проблема с областями видимости, но я слишком большой новичок в javascript, чтобы знать, в чем проблема. Опять же, он отлично работает на jsfiddle и на обычной html-странице за пределами Mura. Поскольку он работает на стороне клиента, я немного растерялся, почему он будет вести себя по-другому, когда находится внутри вывода Mura. HTML и JavaScript выглядит одинаково для обоих, но ошибка происходит только на странице Mura. Любой вклад будет принята с благодарностью.

Ответы [ 2 ]

0 голосов
/ 18 февраля 2012

Проблема была вызвана выводом отладки cf. Отключение отладки позволило коду работать должным образом. Это происходило только при запуске кода через Mura, но я полагаю, что это связано с отладкой, отображающей содержимое дисплея в виде переменной.

0 голосов
/ 17 февраля 2012

Не могли бы вы попытаться дать выделению ID = "mSection" в дополнение к name = "mSection"?

...